summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main/main.c31
-rw-r--r--main/php.h2
-rw-r--r--main/php_globals.h7
3 files changed, 40 insertions, 0 deletions
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 */
/*