diff options
| author | Peter Bex <peter@more-magic.net> | 2017-05-23 20:42:16 +0200 | 
|---|---|---|
| committer | Peter Bex <peter@more-magic.net> | 2017-05-23 20:45:55 +0200 | 
| commit | 1f908fee0ab409932bcfe6aa8736d522aa2c4f8b (patch) | |
| tree | 3128842ce7c615266c26eb369b1c083916f4c02d | |
| parent | 217f7dc60a4a0ad0542e71f01378a5d110c9844e (diff) | |
| download | scsh-process-1f908fee0ab409932bcfe6aa8736d522aa2c4f8b.tar.gz | |
Fix race condition that caused mutex to get unlocked when the process wasn't ready yet
| -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) | 
