--- dwm.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/dwm.c b/dwm.c index b3c43ee..963baca 100644 --- a/dwm.c +++ b/dwm.c _AT_@ -205,7 +205,6 @@ 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); static void spawn(const Arg *arg); static void tag(const Arg *arg); static void tagmon(const Arg *arg); _AT_@ -1537,11 +1536,23 @@ void setup(void) { int i; + sigset_t sm, oldsm; XSetWindowAttributes wa; Atom utf8string; + const struct sigaction sc = { + .sa_handler = SIG_DFL, + .sa_flags = SA_RESTART | SA_NOCLDWAIT | SA_NOCLDSTOP, + }; + + sigfillset(&sm); + sigprocmask(SIG_SETMASK, &sm, &oldsm); - /* clean up any zombies immediately */ - sigchld(0); + if (sigaction(SIGCHLD, &sc, NULL) < 0) + die("sigaction failed:"); + /* for zombies inherited before SA_NOCLDWAIT from .xinitrc, etc */ + while (waitpid(-1, NULL, WNOHANG) > 0); + + sigprocmask(SIG_SETMASK, &oldsm, NULL); /* init screen */ screen = DefaultScreen(dpy); _AT_@ -1635,14 +1646,6 @@ showhide(Client *c) } } -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) { -- 2.37.1Received on Wed Jul 27 2022 - 08:36:28 CEST
This archive was generated by hypermail 2.3.0 : Wed Jul 27 2022 - 11:24:31 CEST