From: Martin Kraemer Date: Fri, 1 Feb 2008 08:50:09 +0000 (+0000) Subject: Avoid core dumps by getting the signal_description only if X-Git-Tag: 2.3.0~1011 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a210a654265e48043028f912f2a05b5325b7aa1a;p=apache Avoid core dumps by getting the signal_description only if a process actually terminated on a signal. Update status only on a valid wait response. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@617373 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/mpm_common.c b/server/mpm_common.c index 36fe9ea588..70942e2e41 100644 --- a/server/mpm_common.c +++ b/server/mpm_common.c @@ -138,7 +138,8 @@ static int reclaim_one_pid(pid_t pid, action_t action) waitret = apr_proc_wait(&proc, &status, &why, APR_NOWAIT); if (waitret != APR_CHILD_NOTDONE) { #ifdef AP_MPM_WANT_PROCESS_CHILD_STATUS - ap_process_child_status(&proc, why, status); + if (waitret == APR_CHILD_DONE) + ap_process_child_status(&proc, why, status); #endif return 1; } @@ -417,7 +418,7 @@ void ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode, apr_proc_t *ret, int ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status) { int signum = status; - const char *sigdesc = apr_signal_description_get(signum); + const char *sigdesc; /* Child died... if it died due to a fatal error, * we should simply bail out. The caller needs to @@ -445,6 +446,8 @@ int ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status) } if (APR_PROC_CHECK_SIGNALED(why)) { + sigdesc = apr_signal_description_get(signum); + switch (signum) { case SIGTERM: case SIGHUP: