From: Yann Ylavic Date: Thu, 2 Nov 2017 21:49:43 +0000 (+0000) Subject: mpm_unix(es): cleanup properly on exit in one_process mode. X-Git-Tag: 2.5.0-alpha~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6566335ac9d63241907a0203e8fa9a754290b2d2;p=apache mpm_unix(es): cleanup properly on exit in one_process mode. We can't destroy ap_pglobal because clean_child_exit() runs in DSO which would be unloaded under us, so use atexit() to defer the final apr_terminate(). [Reverted by 1822535] git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1814112 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/mpm/event/event.c b/server/mpm/event/event.c index 0bf2dbe775..d57e771c7e 100644 --- a/server/mpm/event/event.c +++ b/server/mpm/event/event.c @@ -732,6 +732,7 @@ static void clean_child_exit(int code) if (one_process) { event_note_child_killed(/* slot */ 0, 0, 0); + atexit(apr_terminate); } exit(code); diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c index f9b9933bd3..649cc97d63 100644 --- a/server/mpm/prefork/prefork.c +++ b/server/mpm/prefork/prefork.c @@ -230,6 +230,7 @@ static void clean_child_exit(int code) if (one_process) { prefork_note_child_killed(/* slot */ 0, 0, 0); + atexit(apr_terminate); } ap_mpm_pod_close(my_bucket->pod); diff --git a/server/mpm/worker/worker.c b/server/mpm/worker/worker.c index 3b93f3ceac..c87c003c7e 100644 --- a/server/mpm/worker/worker.c +++ b/server/mpm/worker/worker.c @@ -436,6 +436,7 @@ static void clean_child_exit(int code) if (one_process) { worker_note_child_killed(/* slot */ 0, 0, 0); + atexit(apr_terminate); } exit(code);