cvs: /php4 main.c php.h php_globals.h
| From: | Thies C. Arntzen | Date: | Sat, 15 Jan 2000 13:03:24 +0000 |
| Subject: | cvs: /php4 main.c php.h php_globals.h | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-9140@lists.php.net to get a copy of this message | ||
thies Sat Jan 15 05:03:24 2000 EDT
Modified files:
/php4 main.c php.h php_globals.h
Log:
- don't set php_errormsg on errors that will cause a zend_bailout().
using zend_hash_update() can make things worse in this situation.
- new function php_register_pre_request_shutdown(). this way modules
can register callbacks that will be called as soon as execution of
the script is done but *before* any cleanup (global symbol_table etc)
has taken place.
Index: php4/main.c
diff -u php4/main.c:1.171 php4/main.c:1.172
--- php4/main.c:1.171 Thu Jan 13 12:39:33 2000
+++ php4/main.c Sat Jan 15 05:02:54 2000
@@ -19,7 +19,7 @@
*/
-/* $Id: main.c,v 1.171 2000/01/13 20:39:33 zeev Exp $ */
+/* $Id: main.c,v 1.172 2000/01/15 13:02:54 thies Exp $ */
#include <stdio.h>
@@ -439,6 +439,19 @@
}
}
}
+
+ switch (type) {
+ case E_ERROR:
+ case E_CORE_ERROR:
+ /*case E_PARSE: the parser would return 1 (failure), we can bail out nicely */
+ case E_COMPILE_ERROR:
+ if (module_initialized) {
+ zend_bailout();
+ return;
+ }
+ break;
+ }
+
if (PG(track_errors)) {
pval *tmp;
@@ -455,17 +468,6 @@
zend_hash_update(EG(active_symbol_table), "php_errormsg",
sizeof("php_errormsg"), (void **) & tmp, sizeof(pval *), NULL);
}
-
- switch (type) {
- case E_ERROR:
- case E_CORE_ERROR:
- /*case E_PARSE: the parser would return 1 (failure), we can bail out nicely */
- case E_COMPILE_ERROR:
- if (module_initialized) {
- zend_bailout();
- }
- break;
- }
}
@@ -652,33 +654,51 @@
}
}
-static void php_start_post_request_startup(void *data)
+static void php_start_request_hook(void *data)
{
- php_post_request_startup *ptr = (php_post_request_startup *) data;
+ php_request_hook *ptr = (php_request_hook *) data;
ptr->func(ptr->userdata);
}
+static void php_execute_pre_request_shutdown(PLS_D)
+{
+ zend_llist_apply(&PG(ll_pre_request_shutdown), php_start_request_hook);
+}
+
static void php_execute_post_request_startup(PLS_D)
{
- zend_llist_apply(&PG(ll_post_request_startup), php_start_post_request_startup);
+ zend_llist_apply(&PG(ll_post_request_startup), php_start_request_hook);
}
-static void php_destroy_post_request_startup(void)
+static void php_destroy_request_hooks(void)
{
PLS_FETCH();
+ zend_llist_destroy(&PG(ll_pre_request_shutdown));
zend_llist_destroy(&PG(ll_post_request_startup));
}
-static void php_init_post_request_startup(PLS_D)
+static void php_init_request_hooks(PLS_D)
{
- zend_llist_init(&PG(ll_post_request_startup), sizeof(php_post_request_startup), NULL, 0);
+ zend_llist_init(&PG(ll_post_request_startup), sizeof(php_request_hook), NULL, 0);
+ zend_llist_init(&PG(ll_pre_request_shutdown), sizeof(php_request_hook), NULL, 0);
}
+void php_register_pre_request_shutdown(void (*func)(void *), void *userdata)
+{
+ php_request_hook ptr;
+ PLS_FETCH();
+
+ ptr.func = func;
+ ptr.userdata = userdata;
+
+ zend_llist_add_element(&PG(ll_pre_request_shutdown), &ptr);
+}
+
void php_register_post_request_startup(void (*func)(void *), void *userdata)
{
- php_post_request_startup ptr;
+ php_request_hook ptr;
PLS_FETCH();
ptr.func = func;
@@ -692,7 +712,7 @@
global_lock();
php_output_startup();
- php_init_post_request_startup(PLS_C);
+ php_init_request_hooks(PLS_C);
#if APACHE
/*
@@ -772,7 +792,6 @@
ELS_FETCH();
SLS_FETCH();
- php_destroy_post_request_startup();
sapi_send_headers();
php_end_ob_buffering(SG(request_info).headers_only?0:1);
@@ -783,11 +802,11 @@
zend_deactivate(CLS_C ELS_CC);
sapi_deactivate(SLS_C);
+ php_destroy_request_hooks();
php_destroy_request_info(NULL);
shutdown_memory_manager(CG(unclean_shutdown), 0);
php_unset_timeout();
-
#if CGI_BINARY
fflush(stdout);
if(request_info.php_argv0) {
@@ -1275,6 +1294,7 @@
EG(active_op_array) = EG(main_op_array);
php_execute_post_request_startup(PLS_C);
zend_execute(EG(main_op_array) ELS_CC);
+ php_execute_pre_request_shutdown(PLS_C);
}
}
Index: php4/php.h
diff -u php4/php.h:1.55 php4/php.h:1.56
--- php4/php.h:1.55 Fri Dec 31 17:31:27 1999
+++ php4/php.h Sat Jan 15 05:02:54 2000
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php.h,v 1.55 2000/01/01 01:31:27 sas Exp $ */
+/* $Id: php.h,v 1.56 2000/01/15 13:02:54 thies Exp $ */
#ifndef _PHP_H
#define _PHP_H
@@ -320,6 +320,7 @@
extern PHPAPI int _php_error_log(int opt_err,char *message,char *opt,char *headers);
PHPAPI void php_register_post_request_startup(void (*func)(void *), void *userdata);
+PHPAPI void php_register_pre_request_shutdown(void (*func)(void *), void *userdata);
PHPAPI int cfg_get_long(char *varname, long *result);
PHPAPI int cfg_get_double(char *varname, double *result);
Index: php4/php_globals.h
diff -u php4/php_globals.h:1.32 php4/php_globals.h:1.33
--- php4/php_globals.h:1.32 Thu Jan 13 12:39:33 2000
+++ php4/php_globals.h Sat Jan 15 05:02:54 2000
@@ -97,13 +97,14 @@
unsigned char header_is_being_sent;
zend_llist ll_post_request_startup;
+ zend_llist ll_pre_request_shutdown;
};
typedef struct {
void (*func)(void *);
void *userdata;
-} php_post_request_startup;
+} php_request_hook;
#endif /* _PHP_GLOBALS_H */