]> granicus.if.org Git - php/commitdiff
Add post request startup handlers. These are called at the end of the
authorSascha Schumann <sas@php.net>
Wed, 17 Nov 1999 23:01:27 +0000 (23:01 +0000)
committerSascha Schumann <sas@php.net>
Wed, 17 Nov 1999 23:01:27 +0000 (23:01 +0000)
request startup function, and can use the initialized structures like
the symbol table.

main/main.c
main/php.h
main/php_globals.h

index 14922019951214cbd7da7650cddc8f1bf16c2a80..249390136abf5f535cea543b2b6a52b0adf1b6cc 100644 (file)
@@ -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;
 }
 
index d732b42c8926342d4a4a4506d62d6e1ae4216fe9..61743a050e6709f218935f4864a1914bd7a39797 100644 (file)
@@ -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);
index ab2ba8ac3253b43e1e38820db629ace52ecd7fcc..fcbdb68cc900cafedb525cd2fedce9f6d773c706 100644 (file)
@@ -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 */
 
 /*