about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorNRK <nrk@disroot.org>2022-07-14 07:26:40 +0600
committerHiltjo Posthuma <hiltjo@codemadness.org>2022-07-15 20:53:58 +0200
commit6613d9f9a1a5630bab30bc2b70bdc793977073ee (patch)
tree914cd55c1688ed675fab188ac562b17904471da1
parent9bffa845faa181fb3afe05f3dc86ad79c80736be (diff)
downloaddwm-6613d9f9a1a5630bab30bc2b70bdc793977073ee.tar.gz
do not call signal-unsafe function inside sighanlder
die() calls vprintf, fputc and exit; none of these are
async-signal-safe, see `man 7 signal-safety`.
-rw-r--r--dwm.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/dwm.c b/dwm.c
index b3c43ee..7c0f978 100644
--- a/dwm.c
+++ b/dwm.c
@@ -1541,6 +1541,8 @@ setup(void)
 	Atom utf8string;
 
 	/* clean up any zombies immediately */
+	if (signal(SIGCHLD, sigchld) == SIG_ERR)
+		die("can't install SIGCHLD handler:");
 	sigchld(0);
 
 	/* init screen */
@@ -1638,8 +1640,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));
 }