diff options
Diffstat (limited to 'calmwm.c')
-rw-r--r-- | calmwm.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/calmwm.c b/calmwm.c index 3656b48..90844a5 100644 --- a/calmwm.c +++ b/calmwm.c @@ -48,7 +48,7 @@ struct conf Conf; const char *homedir; volatile sig_atomic_t cwm_status; -static void sigchld_cb(int); +static void sighdlr(int); static int x_errorhandler(Display *, XErrorEvent *); static void x_init(const char *); static void x_restart(char **); @@ -84,7 +84,7 @@ main(int argc, char **argv) argc -= optind; argv += optind; - if (signal(SIGCHLD, sigchld_cb) == SIG_ERR) + if (signal(SIGCHLD, sighdlr) == SIG_ERR) err(1, "signal"); if ((homedir = getenv("HOME")) == NULL || *homedir == '\0') { @@ -205,16 +205,19 @@ x_errorhandler(Display *dpy, XErrorEvent *e) } static void -sigchld_cb(int which) +sighdlr(int sig) { pid_t pid; - int save_errno = errno; - int status; - - /* Collect dead children. */ - while ((pid = waitpid(-1, &status, WNOHANG)) > 0 || - (pid < 0 && errno == EINTR)) - ; + int save_errno = errno, status; + + switch (sig) { + case SIGCHLD: + /* Collect dead children. */ + while ((pid = waitpid(WAIT_ANY, &status, WNOHANG)) > 0 || + (pid < 0 && errno == EINTR)) + ; + break; + } errno = save_errno; } |