summaryrefslogtreecommitdiffstats
path: root/client.c
diff options
context:
space:
mode:
authornicm <nicm>2014-10-01 23:23:19 +0000
committernicm <nicm>2014-10-01 23:23:19 +0000
commit045d0c3b9f616fe76b68d4551a6d66f410e760e8 (patch)
tree484cffbd2b54910b04ee534fa228dc56957d1818 /client.c
parenta54b0055f66bc2d27bd57fc3f818dc185118470f (diff)
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.
Diffstat (limited to 'client.c')
-rw-r--r--client.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/client.c b/client.c
index e92724a2..a790f32e 100644
--- a/client.c
+++ b/client.c
@@ -433,15 +433,11 @@ client_signal(int sig, unused short events, unused void *data)
struct sigaction sigact;
int status;
- if (!client_attached) {
- switch (sig) {
- case SIGCHLD:
- waitpid(WAIT_ANY, &status, WNOHANG);
- break;
- case SIGTERM:
+ if (sig == SIGCHLD)
+ waitpid(WAIT_ANY, &status, WNOHANG);
+ else if (!client_attached) {
+ if (sig == SIGTERM)
event_loopexit(NULL);
- break;
- }
} else {
switch (sig) {
case SIGHUP: