diff options
author | Luke Smith <luke@lukesmith.xyz> | 2023-02-28 18:25:53 -0500 |
---|---|---|
committer | Luke Smith <luke@lukesmith.xyz> | 2023-02-28 18:25:53 -0500 |
commit | 2cfa02d9b350df0957d68037586915917978f2a7 (patch) | |
tree | ed2130c6b002ca81fe84c302e6945510c473413c /dwm.c | |
parent | 787a8bc10df9e229b5f34f998bfab0556c4a6ec4 (diff) |
revert 712d6639ff8e863560328131bbb92b248dc9cde7
Diffstat (limited to 'dwm.c')
-rw-r--r-- | dwm.c | 20 |
1 files changed, 11 insertions, 9 deletions
@@ -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); @@ -2000,6 +1994,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) { if (fork() == 0) { |