Call waitpid on SIGCHLD even if client not attached, it is possible (on

very slow platforms) for the first daemon() child to still be running
when client_attached is set so we end up with a zombie. From J Raynor.
This commit is contained in:
nicm 2014-10-01 23:23:19 +00:00
parent a54b0055f6
commit 045d0c3b9f

View File

@ -433,15 +433,11 @@ client_signal(int sig, unused short events, unused void *data)
struct sigaction sigact; struct sigaction sigact;
int status; int status;
if (!client_attached) { if (sig == SIGCHLD)
switch (sig) { waitpid(WAIT_ANY, &status, WNOHANG);
case SIGCHLD: else if (!client_attached) {
waitpid(WAIT_ANY, &status, WNOHANG); if (sig == SIGTERM)
break;
case SIGTERM:
event_loopexit(NULL); event_loopexit(NULL);
break;
}
} else { } else {
switch (sig) { switch (sig) {
case SIGHUP: case SIGHUP: