From: Yann Ylavic <ylavic@apache.org> Date: Sat, 7 Jun 2014 22:04:48 +0000 (+0000) Subject: -MPMs prefork & worker: avoid segfault with SAFE_ACCEPT in ONE_PROCESS mode. X-Git-Tag: 2.5.0-alpha~4099 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9f9dc4c4d25a5d8b1ee6342d618e0e99274cec73;p=apache -MPMs prefork & worker: avoid segfault with SAFE_ACCEPT in ONE_PROCESS mode. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1601170 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c index d682452b20..016d95e7cd 100644 --- a/server/mpm/prefork/prefork.c +++ b/server/mpm/prefork/prefork.c @@ -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) { diff --git a/server/mpm/worker/worker.c b/server/mpm/worker/worker.c index d6ab4aefe2..585481f62a 100644 --- a/server/mpm/worker/worker.c +++ b/server/mpm/worker/worker.c @@ -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");