httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From MENEAULT Maxime <maxmenea...@free.fr>
Subject [BUG] : pre_config_hook issues
Date Mon, 26 May 2008 07:21:09 GMT
Hi all!

I am posting to the list to confirm a bug I just noticed while 
developing modules for Apache.

Apparently pre_config hooks are not ordered when ap_run_pre_config is 
called.
I noticed and verified one issue and I noticed another one 
(syntactically only) while reading through the code.

First issue (verified):
While during the first configuration pass pre_config hooks seem to be 
ordered for prelinked modules during the second one hooks are not 
ordered (i.e. not in the order specified by APR_HOOK_FIRST...defines).
Fix:
apr_hook_sort_all is called too late during second and further 
configuration passes.
It needs to be called before ap_run_pre_config (l.699 of server/main.c).

Second issue (only noticed while reading the code):
pre_config hooks might not be ordered for dynamically loaded modules 
even during first configuration pass.
Fix:
apr_hook_sort_all needs to be called before ap_run_pre_config (l.627 of 
server/main.c)

I pasted a patch below to fix both issues.

Any comments are welcome.
Should I fill-in a bug report?

Thanks


--- httpd-2.2.8/server/main.c    2007-08-27 03:05:52.000000000 +0200
+++ httpd-2.2.8.new/server/main.c    2008-05-25 22:29:00.000000000 +0200
@@ -625,6 +625,9 @@
          destroy_and_exit_process(process, 1);
      }

+    /* sort hooks again for dynamically loaded modules */
+    apr_hook_sort_all();
+
      if (ap_run_pre_config(pconf, plog, ptemp) != OK) {
          ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0,
                       NULL, "Pre-configuration failed");
@@ -636,7 +639,6 @@
      if (rv == OK) {
          ap_fixup_virtual_hosts(pconf, server_conf);
          ap_fini_vhost_config(pconf, server_conf);
-        apr_hook_sort_all();

          if (configtestonly) {
              ap_run_test_config(pconf, server_conf);
@@ -696,6 +698,8 @@
              destroy_and_exit_process(process, 1);
          }

+        apr_hook_sort_all();
+
          if (ap_run_pre_config(pconf, plog, ptemp) != OK) {
              ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR,
                           0, NULL, "Pre-configuration failed");
@@ -708,7 +712,6 @@
          }
          ap_fixup_virtual_hosts(pconf, server_conf);
          ap_fini_vhost_config(pconf, server_conf);
-        apr_hook_sort_all();
          apr_pool_clear(plog);
          if (ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) {
              ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR,

Mime
View raw message