commit a345c63a597f5db618bf79c23ca4e6277eeab33e
parent 92b8bc27da21394c78a9cb36cf0c11f7b2a782d8
Author: FRIGN <dev@frign.de>
Date: Thu, 7 Aug 2014 17:24:39 +0200
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.
Diffstat:
1 file changed, 3 insertions(+), 12 deletions(-)
diff --git 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 */