Here is the revised patch.
---
 surf.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/surf.c b/surf.c
index 2b54e3c..4ce8fdf 100644
--- a/surf.c
+++ b/surf.c
@@ -315,10 +315,21 @@ setup(void)
 	GIOChannel *gchanin;
 	GdkDisplay *gdpy;
 	int i, j;
+	struct sigaction sa;
+
+	memset(&sa, 0, sizeof(struct sigaction));
+	sigemptyset(&sa.sa_mask);
+	sa.sa_flags = SA_RESTART;
+
+	sa.sa_handler = sigchld;
 
 	/* clean up any zombies immediately */
-	sigchld(0);
-	if (signal(SIGHUP, sighup) == SIG_ERR)
+	if (sigaction(SIGCHLD, &sa, NULL) == -1)
+		die("Can't install SIGCHLD handler");
+
+	sa.sa_handler = sighup;
+
+	if (sigaction(SIGHUP, &sa, NULL) == -1)
 		die("Can't install SIGHUP handler");
 
 	if (!(dpy = XOpenDisplay(NULL)))
@@ -402,8 +413,6 @@ setup(void)
 void
 sigchld(int unused)
 {
-	if (signal(SIGCHLD, sigchld) == SIG_ERR)
-		die("Can't install SIGCHLD handler");
 	while (waitpid(-1, NULL, WNOHANG) > 0)
 		;
 }
-- 
2.29.0


Reply via email to