cvs: php4(PHP_4_2_0) /sapi/apache2filter sapi_apache2.c

From: 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);

« previous php.cvs (#11721) next »