The only moment where it's appropriate for a module to push Defines values into ap_server_config_defines is during the register_hook phase. The problem is that this phase is called earlier for compiled-in modules than for loaded modules. So a module trying to add to it thru apr_array_push(ap_server_config_defines) at that time will succeed, only if it's dynamically loaded, and most likely segfault otherwise.
The following patches delays ap_setup_prelinked_modules to slightly later, after ap_server_config_defines has been proprely initialized.
Index: server/main.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/server/main.c,v
retrieving revision 1.157
diff -u -I$Id -r1.157 main.c
--- server/main.c 25 Apr 2004 17:23:31 -0000 1.157
+++ server/main.c 15 Jun 2004 23:33:28 -0000
@@ -428,18 +428,18 @@
}
#endif+ apr_pool_create(&pcommands, pglobal);
+ apr_pool_tag(pcommands, "pcommands");
+ ap_server_pre_read_config = apr_array_make(pcommands, 1, sizeof(char *));
+ ap_server_post_read_config = apr_array_make(pcommands, 1, sizeof(char *));
+ ap_server_config_defines = apr_array_make(pcommands, 1, sizeof(char *));
+
error = ap_setup_prelinked_modules(process);
if (error) {
ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_EMERG, 0, NULL, "%s: %s",
ap_server_argv0, error);
destroy_and_exit_process(process, 1);
}
-
- apr_pool_create(&pcommands, pglobal);
- apr_pool_tag(pcommands, "pcommands");
- ap_server_pre_read_config = apr_array_make(pcommands, 1, sizeof(char *));
- ap_server_post_read_config = apr_array_make(pcommands, 1, sizeof(char *));
- ap_server_config_defines = apr_array_make(pcommands, 1, sizeof(char *));ap_run_rewrite_args(process);
-- -------------------------------------------------------------------------------- Philippe M. Chiasson m/gozer\@(apache|cpan|ectoplasm)\.org/ GPG KeyID : 88C3A5A5 http://gozer.ectoplasm.org/ F9BF E0C2 480E 7680 1AE5 3631 CB32 A107 88C3A5A5
signature.asc
Description: OpenPGP digital signature
