From: Sascha Schumann Date: Wed, 17 Nov 1999 23:01:27 +0000 (+0000) Subject: Add post request startup handlers. These are called at the end of the X-Git-Tag: ZEND_OPTIMIZER_B1~42 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4bb5e353d51e5ac1ded35df12190bee82d993b91;p=php Add post request startup handlers. These are called at the end of the request startup function, and can use the initialized structures like the symbol table. --- diff --git a/main/main.c b/main/main.c index 1492201995..249390136a 100644 --- a/main/main.c +++ b/main/main.c @@ -674,13 +674,41 @@ static void php_message_handler_for_zend(long message, void *data) } } +static void php_start_post_request_startup(void *data) +{ + php_post_request_startup *ptr = (php_post_request_startup *) data; + + ptr->func(ptr->userdata); +} + +static void php_finish_post_request_startup(PLS_D) +{ + zend_llist_apply(&PG(ll_post_request_startup), php_start_post_request_startup); + zend_llist_destroy(&PG(ll_post_request_startup)); +} + +static void php_init_post_request_startup(PLS_D) +{ + zend_llist_init(&PG(ll_post_request_startup), sizeof(php_post_request_startup), NULL, 0); +} + +void php_register_post_request_startup(void (*func)(void *), void *userdata) +{ + php_post_request_startup ptr; + PLS_FETCH(); + ptr.func = func; + ptr.userdata = userdata; + + zend_llist_add_element(&PG(ll_post_request_startup), &ptr); +} int php_request_startup(CLS_D ELS_DC PLS_DC SLS_DC) { global_lock(); php_output_startup(); + php_init_post_request_startup(PLS_C); if (PG(output_buffering)) { php_start_ob_buffering(); @@ -732,6 +760,9 @@ int php_request_startup(CLS_D ELS_DC PLS_DC SLS_DC) zend_hash_update(&EG(symbol_table), "PHP_AUTH_PW", sizeof("PHP_AUTH_PW"), &auth_password, sizeof(zval *), NULL); } + + php_finish_post_request_startup(PLS_C); + return SUCCESS; } diff --git a/main/php.h b/main/php.h index d732b42c89..61743a050e 100644 --- a/main/php.h +++ b/main/php.h @@ -317,6 +317,8 @@ int mergesort(void *base, size_t nmemb, register size_t size, int (*cmp) (const /*from basic functions*/ 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 int cfg_get_long(char *varname, long *result); PHPAPI int cfg_get_double(char *varname, double *result); PHPAPI int cfg_get_string(char *varname, char **result); diff --git a/main/php_globals.h b/main/php_globals.h index ab2ba8ac32..fcbdb68cc9 100644 --- a/main/php_globals.h +++ b/main/php_globals.h @@ -94,9 +94,16 @@ struct _php_core_globals { /* for fsock */ HashTable ht_fsock_keys; HashTable ht_fsock_socks; + + zend_llist ll_post_request_startup; }; +typedef struct { + void (*func)(void *); + void *userdata; +} php_post_request_startup; + #endif /* _PHP_GLOBALS_H */ /*