diff options
-rw-r--r-- | scsh-process.scm | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/scsh-process.scm b/scsh-process.scm index 2810baf..0676681 100644 --- a/scsh-process.scm +++ b/scsh-process.scm @@ -121,11 +121,13 @@ (scsh-process-ok? p) (scsh-process-pid p)) (if (and p (not nohang)) - (let ((m (make-mutex))) + (let lp ((m (make-mutex))) (mutex-unlock! m (scsh-process-child-condition p)) - (values (scsh-process-exit-status p) - (scsh-process-ok? p) - (scsh-process-pid p))) + (if (not (scsh-process-exit-status p)) + (lp m) ; might have been forcibly unblocked + (values (scsh-process-exit-status p) + (scsh-process-ok? p) + (scsh-process-pid p)))) (handle-exceptions exn (if (and p (scsh-process-exit-status p)) ; Signal might've occurred (values (scsh-process-exit-status p) |