]> granicus.if.org Git - php/commitdiff
Merge two SEGV fixes from the trunk:
authorAaron Bannert <aaron@php.net>
Mon, 6 May 2002 15:42:23 +0000 (15:42 +0000)
committerAaron Bannert <aaron@php.net>
Mon, 6 May 2002 15:42:23 +0000 (15:42 +0000)
- startup SEGV caused by delaying the initialization too long.
- graceful restart SEGV caused by not re-initializing.

sapi/apache2filter/sapi_apache2.c

index 11a2632e2ffda3144faa2ef7c2eedf8fe8543d27..fe485d275aad5afa78ce2986a7744d54408ef966 100644 (file)
@@ -437,6 +437,23 @@ static int
 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);