mirror of
https://github.com/apache/httpd.git
synced 2025-07-23 01:08:51 +00:00
mpm_unix(es): cleanup properly on exit in one_process mode.
We can't destroy ap_pglobal in the MPMs because clean_child_exit() runs in a DSO which would be unloaded under us. So we defer an ap_terminate() with atexit() in ap_unixd_mpm_set_signals(), all this is static/builtin code in "os/unix/unixd.c". git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1822537 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@ -18,6 +18,7 @@
|
||||
#include "httpd.h"
|
||||
#include "http_config.h"
|
||||
#include "http_main.h"
|
||||
#include "http_core.h"
|
||||
#include "http_log.h"
|
||||
#include "unixd.h"
|
||||
#include "mpm_common.h"
|
||||
@ -515,6 +516,13 @@ static apr_status_t unset_signals(void *unused)
|
||||
return APR_SUCCESS;
|
||||
}
|
||||
|
||||
static void ap_terminate(void)
|
||||
{
|
||||
ap_main_state = AP_SQ_MS_EXITING;
|
||||
apr_pool_destroy(ap_pglobal);
|
||||
apr_terminate();
|
||||
}
|
||||
|
||||
AP_DECLARE(void) ap_unixd_mpm_set_signals(apr_pool_t *pconf, int one_process)
|
||||
{
|
||||
#ifndef NO_USE_SIGACTION
|
||||
@ -524,6 +532,13 @@ AP_DECLARE(void) ap_unixd_mpm_set_signals(apr_pool_t *pconf, int one_process)
|
||||
if (!one_process) {
|
||||
ap_fatal_signal_setup(ap_server_conf, pconf);
|
||||
}
|
||||
else {
|
||||
static int once = 0;
|
||||
if (!once) {
|
||||
atexit(ap_terminate);
|
||||
once = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Signals' handlers depend on retained data */
|
||||
(void)ap_unixd_mpm_get_retained_data();
|
||||
|
Reference in New Issue
Block a user