]> granicus.if.org Git - apache/commitdiff
-MPMs prefork & worker: avoid segfault with SAFE_ACCEPT in ONE_PROCESS mode.
authorYann Ylavic <ylavic@apache.org>
Sat, 7 Jun 2014 22:04:48 +0000 (22:04 +0000)
committerYann Ylavic <ylavic@apache.org>
Sat, 7 Jun 2014 22:04:48 +0000 (22:04 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1601170 13f79535-47bb-0310-9956-ffa450edef68

server/mpm/prefork/prefork.c
server/mpm/worker/worker.c

index d682452b20d20945843d0b9b8ba34355c2cbc073..016d95e7cdc54f730912b0fc9c27256792fc8be8 100644 (file)
@@ -755,6 +755,10 @@ static int make_child(server_rec *s, int slot)
         retained->max_daemons_limit = slot + 1;
     }
 
+    child_listen = mpm_listen[bucket[slot]];
+    child_mutex = accept_mutex[bucket[slot]];
+    child_pod = pod[bucket[slot]];
+
     if (one_process) {
         apr_signal(SIGHUP, sig_term);
         /* Don't catch AP_SIG_GRACEFUL in ONE_PROCESS mode :) */
@@ -771,10 +775,6 @@ static int make_child(server_rec *s, int slot)
     (void) ap_update_child_status_from_indexes(slot, 0, SERVER_STARTING,
                                                (request_rec *) NULL);
 
-    child_listen = mpm_listen[bucket[slot]];
-    child_mutex = accept_mutex[bucket[slot]];
-    child_pod = pod[bucket[slot]];
-
 #ifdef _OSD_POSIX
     /* BS2000 requires a "special" version of fork() before a setuid() call */
     if ((pid = os_fork(ap_unixd_config.user_name)) == -1) {
index d6ab4aefe23f8a2364c73c10e2ea9e66a5739d78..585481f62a6df810c1f22e6a1aa354abc51246aa 100644 (file)
@@ -1407,6 +1407,10 @@ static int make_child(server_rec *s, int slot)
         retained->max_daemons_limit = slot + 1;
     }
 
+    child_listen = mpm_listen[bucket[slot]];
+    child_mutex = accept_mutex[bucket[slot]];
+    child_pod = pod[bucket[slot]];
+
     if (one_process) {
         set_signals();
         worker_note_child_started(slot, getpid());
@@ -1414,10 +1418,6 @@ static int make_child(server_rec *s, int slot)
         /* NOTREACHED */
     }
 
-    child_listen = mpm_listen[bucket[slot]];
-    child_mutex = accept_mutex[bucket[slot]];
-    child_pod = pod[bucket[slot]];
-
     if ((pid = fork()) == -1) {
         ap_log_error(APLOG_MARK, APLOG_ERR, errno, s, APLOGNO(00283)
                      "fork: Unable to fork new process");