summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scsh-process.scm2
-rw-r--r--tests/run.scm13
2 files changed, 15 insertions, 0 deletions
diff --git a/scsh-process.scm b/scsh-process.scm
index 5bfd7e9..3682c68 100644
--- a/scsh-process.scm
+++ b/scsh-process.scm
@@ -240,6 +240,8 @@
(thunk (and thunk (lambda ()
(clear-scsh-pending-processes!)
(maybe-reinstall-deadlock-workaround!)
+ (unless sigchld-was-masked?
+ (signal-unmask! signal/chld))
(thunk))))
(pid (cond-expand
(has-thread-killer
diff --git a/tests/run.scm b/tests/run.scm
index f4409fd..f05d643 100644
--- a/tests/run.scm
+++ b/tests/run.scm
@@ -32,8 +32,21 @@
(test-assert "signal wasn't unmasked" (signal-masked? signal/chld))
+ (test "sigchld is masked inside child process"
+ "yes"
+ (run/string*
+ (lambda ()
+ (display (if (signal-masked? signal/chld) "yes" "no")))))
+
(signal-unmask! signal/chld)
+ (test "after unmasking, sigchld is also unmasked inside child process"
+ "yes"
+ (run/string*
+ (lambda ()
+ (display (if (signal-masked? signal/chld) "no" "yes")))))
+
+
;; Reported by Haochi Kiang
(test "run/string* does not redirect stderr"
'("This should go to stdout" "")