b57f59f
From eb7d2d3ac2a82570c3d413f61d3832035e9d11dd Mon Sep 17 00:00:00 2001
b57f59f
From: Jamie Zawinski <jwz@jwz.org>
b57f59f
Date: Sat, 24 Oct 2015 22:58:02 +0900
b57f59f
Subject: [PATCH] Modify sigchld_hander / in_signal_hander_p mechanism
b57f59f
b57f59f
---
b57f59f
 driver/subprocs.c | 8 +++++++-
b57f59f
 1 file changed, 7 insertions(+), 1 deletion(-)
b57f59f
b57f59f
diff --git a/driver/subprocs.c b/driver/subprocs.c
b57f59f
index 1969724..51332aa 100644
b57f59f
--- a/driver/subprocs.c
b57f59f
+++ b/driver/subprocs.c
b57f59f
@@ -387,6 +387,11 @@ block_sigchld (void)
b57f59f
 void
b57f59f
 unblock_sigchld (void)
b57f59f
 {
b57f59f
+  if (block_sigchld_handler <= 0)
b57f59f
+    abort();
b57f59f
+
b57f59f
+  if (block_sigchld_handler <= 1)  /* only unblock if count going to 0 */
b57f59f
+    {
b57f59f
 #ifdef HAVE_SIGACTION
b57f59f
   struct sigaction sa;
b57f59f
   sigset_t child_set;
b57f59f
@@ -402,6 +407,7 @@ unblock_sigchld (void)
b57f59f
 #else /* !HAVE_SIGACTION */
b57f59f
   signal(SIGPIPE, SIG_DFL);
b57f59f
 #endif /* !HAVE_SIGACTION */
b57f59f
+    }
b57f59f
 
b57f59f
   block_sigchld_handler--;
b57f59f
 }
b57f59f
@@ -415,7 +421,7 @@ kill_job (saver_info *si, pid_t pid, int signal)
b57f59f
 
b57f59f
   clean_job_list();
b57f59f
 
b57f59f
-  if (block_sigchld_handler)
b57f59f
+  if (in_signal_handler_p)
b57f59f
     /* This function should not be called from the signal handler. */
b57f59f
     abort();
b57f59f
 
b57f59f
-- 
b57f59f
2.5.0
b57f59f