Blame xscreensaver-5.33-0002-Modify-sigchld_hander-in_signal_hander_p-mechanism.patch
|
|
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 |
|