cvs: php4(PHP_4_2_0) /sapi/apache2filter sapi_apache2.c
| From: | Aaron Bannert | Date: | Mon, 06 May 2002 15:42:23 +0000 |
| Subject: | cvs: php4(PHP_4_2_0) /sapi/apache2filter sapi_apache2.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-11721@lists.php.net to get a copy of this message | ||
aaron Mon May 6 11:42:23 2002 EDT
Modified files: (Branch: PHP_4_2_0)
/php4/sapi/apache2filter sapi_apache2.c
Log:
Merge two SEGV fixes from the trunk:
- startup SEGV caused by delaying the initialization too long.
- graceful restart SEGV caused by not re-initializing.
Index: php4/sapi/apache2filter/sapi_apache2.c
diff -u php4/sapi/apache2filter/sapi_apache2.c:1.61.2.11
php4/sapi/apache2filter/sapi_apache2.c:1.61.2.12
--- php4/sapi/apache2filter/sapi_apache2.c:1.61.2.11 Thu Apr 18 12:34:49 2002
+++ php4/sapi/apache2filter/sapi_apache2.c Mon May 6 11:42:23 2002
@@ -437,6 +437,23 @@
php_apache_server_startup(apr_pool_t *pconf, apr_pool_t *plog,
apr_pool_t *ptemp, server_rec *s)
{
+ void *data = NULL;
+ const char *userdata_key = "apache2filter_post_config";
+
+ /* Apache will load, unload and then reload a DSO module. This
+ * prevents us from starting PHP until the second load. */
+ apr_pool_userdata_get(&data, userdata_key, s->process->pool);
+ if (data == NULL) {
+ /* We must use set() here and *not* setn(), otherwise the
+ * static string pointed to by userdata_key will be mapped
+ * to a different location when the DSO is reloaded and the
+ * pointers won't match, causing get() to return NULL when
+ * we expected it to return non-NULL. */
+ apr_pool_userdata_set((const void *)1, userdata_key,
+ apr_pool_cleanup_null, s->process->pool);
+ return OK;
+ }
+
tsrm_startup(1, 1, 0, NULL);
sapi_startup(&apache2_sapi_module);
apache2_sapi_module.startup(&apache2_sapi_module);