diff --git a/config.h b/config.h index 99501aa..0213e11 100644 --- a/config.h +++ b/config.h @@ -245,7 +245,7 @@ static const Key keys[] = { { MODKEY, XK_F5, xrdb, {.v = NULL } }, { MODKEY, XK_F6, spawn, {.v = (const char*[]){ "torwrap", NULL } } }, { MODKEY, XK_F7, spawn, {.v = (const char*[]){ "td-toggle", NULL } } }, - { MODKEY, XK_F8, spawn, {.v = (const char*[]){ "mw", "-Y", NULL } } }, + { MODKEY, XK_F8, spawn, {.v = (const char*[]){ "mailsync", NULL } } }, { MODKEY, XK_F9, spawn, {.v = (const char*[]){ "mounter", NULL } } }, { MODKEY, XK_F10, spawn, {.v = (const char*[]){ "unmounter", NULL } } }, { MODKEY, XK_F11, spawn, SHCMD("mpv --untimed --no-cache --no-osc --no-input-default-bindings --profile=low-latency --input-conf=/dev/null --title=webcam $(ls /dev/video[0,2,4,6,8] | tail -n 1)") }, diff --git a/dwm.c b/dwm.c index df45a64..3c0afbf 100644 --- a/dwm.c +++ b/dwm.c @@ -259,6 +259,7 @@ static void setmfact(const Arg *arg); static void setup(void); static void seturgent(Client *c, int urg); static void showhide(Client *c); +static void sigchld(int unused); #ifndef __OpenBSD__ static int getdwmblockspid(); static void sigdwmblocks(const Arg *arg); @@ -1855,16 +1856,9 @@ setup(void) int i; XSetWindowAttributes wa; Atom utf8string; - struct sigaction sa; - /* do not transform children into zombies when they terminate */ - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_NOCLDSTOP | SA_NOCLDWAIT | SA_RESTART; - sa.sa_handler = SIG_IGN; - sigaction(SIGCHLD, &sa, NULL); - - /* clean up any zombies (inherited from .xinitrc etc) immediately */ - while (waitpid(-1, NULL, WNOHANG) > 0); + /* clean up any zombies immediately */ + sigchld(0); signal(SIGHUP, sighup); signal(SIGTERM, sigterm); @@ -1999,6 +1993,14 @@ sigdwmblocks(const Arg *arg) } #endif +void +sigchld(int unused) +{ + if (signal(SIGCHLD, sigchld) == SIG_ERR) + die("can't install SIGCHLD handler:"); + while (0 < waitpid(-1, NULL, WNOHANG)); +} + void spawn(const Arg *arg) {