From 1fa72b07728ebb396a9f236921b81c369bb12ccb Mon Sep 17 00:00:00 2001
From: "Devin J. Pohly" <djpohly@gmail.com>
Date: Wed, 10 Mar 2021 09:50:09 -0600
Subject: remove sigchld function

Explicitly setting the handler for SIGCHLD to SIG_IGN tells the OS to
reap zombie processes automatically, which is what we wanted anyway.
---
 dwl.c | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

(limited to 'dwl.c')

diff --git a/dwl.c b/dwl.c
index 4098f86..0853f1e 100644
--- a/dwl.c
+++ b/dwl.c
@@ -278,7 +278,6 @@ static void setlayout(const Arg *arg);
 static void setmfact(const Arg *arg);
 static void setmon(Client *c, Monitor *m, unsigned int newtags);
 static void setup(void);
-static void sigchld(int unused);
 static void spawn(const Arg *arg);
 static void tag(const Arg *arg);
 static void tagmon(const Arg *arg);
@@ -1984,8 +1983,9 @@ setup(void)
 	 * clients from the Unix socket, manging Wayland globals, and so on. */
 	dpy = wl_display_create();
 
-	/* clean up child processes immediately */
-	sigchld(0);
+	/* Indicate explicitly to the OS that we are not interested in info
+	 * about child processes (per POSIX.1-2001) */
+	signal(SIGCHLD, SIG_IGN);
 
 	/* The backend is a wlroots feature which abstracts the underlying input and
 	 * output hardware. The autocreate option will choose the most suitable
@@ -2136,15 +2136,6 @@ setup(void)
 #endif
 }
 
-void
-sigchld(int unused)
-{
-	if (signal(SIGCHLD, sigchld) == SIG_ERR)
-		EBARF("can't install SIGCHLD handler");
-	while (0 < waitpid(-1, NULL, WNOHANG))
-		;
-}
-
 void
 spawn(const Arg *arg)
 {
-- 
cgit v1.2.3