Module: kamailio
Branch: master
Commit: 6af11bf9858921deb74cce351013b734e1b29a6f
URL:
https://github.com/kamailio/kamailio/commit/6af11bf9858921deb74cce351013b73…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: GitHub <noreply(a)github.com>
Date: 2017-04-28T08:35:55+02:00
Merge pull request #1101 from codyherzog/master
core: Don't terminate on harmless SIGCHLD.
---
Modified: src/main.c
---
Diff:
https://github.com/kamailio/kamailio/commit/6af11bf9858921deb74cce351013b73…
Patch:
https://github.com/kamailio/kamailio/commit/6af11bf9858921deb74cce351013b73…
---
diff --git a/src/main.c b/src/main.c
index 7781901..3fdf070 100644
--- a/src/main.c
+++ b/src/main.c
@@ -675,6 +675,7 @@ void handle_sigs(void)
{
pid_t chld;
int chld_status;
+ int any_chld_stopped;
int memlog;
switch(sig_flag){
@@ -730,7 +731,9 @@ void handle_sigs(void)
break;
case SIGCHLD:
+ any_chld_stopped=0;
while ((chld=waitpid( -1, &chld_status, WNOHANG ))>0) {
+ any_chld_stopped=1;
if (WIFEXITED(chld_status))
LM_ALERT("child process %ld exited normally,"
" status=%d\n", (long)chld,
@@ -747,6 +750,16 @@ void handle_sigs(void)
" signal %d\n", (long)chld,
WSTOPSIG(chld_status));
}
+
+ /* If it appears that no child process has stopped, then do not terminate on SIGCHLD.
+ Certain modules like app_python can run external scripts which cause child
processes to be started and
+ stopped. That can result in SIGCHLD being received here even though there is no
real problem. Therefore,
+ we do not terminate Kamailio unless we can find the child process which has
stopped. */
+ if (!any_chld_stopped) {
+ LM_INFO("SIGCHLD received, but no child has stopped, ignoring it\n");
+ break;
+ }
+
#ifndef STOP_JIRIS_CHANGES
if (dont_fork) {
LM_INFO("dont_fork turned on, living on\n");