generic sighandler

This commit is contained in:
okan 2014-09-06 16:24:32 +00:00
parent 140f8b9eba
commit 977992626a

View File

@ -48,7 +48,7 @@ struct conf Conf;
const char *homedir; const char *homedir;
volatile sig_atomic_t cwm_status; volatile sig_atomic_t cwm_status;
static void sigchld_cb(int); static void sighdlr(int);
static int x_errorhandler(Display *, XErrorEvent *); static int x_errorhandler(Display *, XErrorEvent *);
static void x_init(const char *); static void x_init(const char *);
static void x_restart(char **); static void x_restart(char **);
@ -84,7 +84,7 @@ main(int argc, char **argv)
argc -= optind; argc -= optind;
argv += optind; argv += optind;
if (signal(SIGCHLD, sigchld_cb) == SIG_ERR) if (signal(SIGCHLD, sighdlr) == SIG_ERR)
err(1, "signal"); err(1, "signal");
if ((homedir = getenv("HOME")) == NULL || *homedir == '\0') { if ((homedir = getenv("HOME")) == NULL || *homedir == '\0') {
@ -205,16 +205,19 @@ x_errorhandler(Display *dpy, XErrorEvent *e)
} }
static void static void
sigchld_cb(int which) sighdlr(int sig)
{ {
pid_t pid; pid_t pid;
int save_errno = errno; int save_errno = errno, status;
int status;
/* Collect dead children. */ switch (sig) {
while ((pid = waitpid(-1, &status, WNOHANG)) > 0 || case SIGCHLD:
(pid < 0 && errno == EINTR)) /* Collect dead children. */
; while ((pid = waitpid(WAIT_ANY, &status, WNOHANG)) > 0 ||
(pid < 0 && errno == EINTR))
;
break;
}
errno = save_errno; errno = save_errno;
} }