Преглед изворни кода

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`.
NRK пре 3 година
родитељ
комит
6613d9f9a1
1 измењених фајлова са 2 додато и 2 уклоњено
  1. 2 2
      dwm.c

+ 2 - 2
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));
 }