From a345c63a597f5db618bf79c23ca4e6277eeab33e Mon Sep 17 00:00:00 2001 From: FRIGN Date: Thu, 7 Aug 2014 17:24:39 +0200 Subject: [PATCH] Refactor sighandler You can't handle SIGKILL. Given we have control over which signals are passed to the sighandler, it's enough to catch SIGCHLD and do standard behaviour than building a big switch for that. --- quark.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/quark.c b/quark.c index d819e8d..72b135b 100644 --- a/quark.c +++ b/quark.c @@ -459,20 +459,12 @@ serve(int fd) { void sighandler(int sig) { - switch(sig) { - default: break; - case SIGHUP: - case SIGINT: - case SIGQUIT: - case SIGABRT: - case SIGTERM: + if (sig == SIGCHLD) { + while(0 < waitpid(-1, NULL, WNOHANG)); + } else { logerrmsg("received signal: %s, closing down\n", strsignal(sig)); close(fd); running = 0; - break; - case SIGCHLD: - while(0 < waitpid(-1, NULL, WNOHANG)); - break; } } @@ -514,7 +506,6 @@ main(int argc, char *argv[]) { signal(SIGQUIT, sighandler); signal(SIGABRT, sighandler); signal(SIGTERM, sighandler); - signal(SIGKILL, sighandler); /* init */ setbuf(stdout, NULL); /* unbuffered stdout */