Fixe race when waiting for SIGCHLD.
authorStefan Vogel <sv@exept.de>
Tue, 25 Mar 1997 13:48:30 +0100
changeset 2498 eb0bad72f05e
parent 2497 5aaa953d3e40
child 2499 95392696facc
Fixe race when waiting for SIGCHLD.
PipeStr.st
PipeStream.st
--- a/PipeStr.st	Tue Mar 25 12:42:00 1997 +0100
+++ b/PipeStr.st	Tue Mar 25 13:48:30 1997 +0100
@@ -371,23 +371,24 @@
     ].
 
     blocked := OperatingSystem blockInterrupts.
-    pid := OperatingSystem exec:'/bin/sh'
-                           withArguments:(Array with:'sh' with:'-c' with:aCommandString)
-                           fileDescriptors:execFdArray
-                           closeDescriptors:(Array with:myFd)
-                           fork:true
-                           newPgrp:true.
-
-    OperatingSystem closeFd:execFd.
-    pid > 0 ifTrue:[
-        self fileDescriptor:myFd withMode:mode.
-        Processor monitorPid:pid action:[ :status |
+    pid := Processor monitor:[
+        OperatingSystem exec:'/bin/sh'
+               withArguments:(Array with:'sh' with:'-c' with:aCommandString)
+               fileDescriptors:execFdArray
+               closeDescriptors:(Array with:myFd)
+               fork:true
+               newPgrp:true.    
+    ] action:[ :status |
+        status stillAlive ifFalse:[
             exitStatus := status.
             pid := nil.
             exitSema signal.
         ].
+    ].
+    OperatingSystem closeFd:execFd.
+    pid notNil ifTrue:[
+        self fileDescriptor:myFd withMode:mode.
     ] ifFalse:[
-        pid := nil.
         lastErrorNumber := OperatingSystem currentErrorNumber.
         OperatingSystem closeFd:myFd.
     ].
@@ -439,6 +440,6 @@
 !PipeStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/PipeStr.st,v 1.50 1997-01-24 23:18:40 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/PipeStr.st,v 1.51 1997-03-25 12:48:30 stefan Exp $'
 ! !
 PipeStream initialize!
--- a/PipeStream.st	Tue Mar 25 12:42:00 1997 +0100
+++ b/PipeStream.st	Tue Mar 25 13:48:30 1997 +0100
@@ -371,23 +371,24 @@
     ].
 
     blocked := OperatingSystem blockInterrupts.
-    pid := OperatingSystem exec:'/bin/sh'
-                           withArguments:(Array with:'sh' with:'-c' with:aCommandString)
-                           fileDescriptors:execFdArray
-                           closeDescriptors:(Array with:myFd)
-                           fork:true
-                           newPgrp:true.
-
-    OperatingSystem closeFd:execFd.
-    pid > 0 ifTrue:[
-        self fileDescriptor:myFd withMode:mode.
-        Processor monitorPid:pid action:[ :status |
+    pid := Processor monitor:[
+        OperatingSystem exec:'/bin/sh'
+               withArguments:(Array with:'sh' with:'-c' with:aCommandString)
+               fileDescriptors:execFdArray
+               closeDescriptors:(Array with:myFd)
+               fork:true
+               newPgrp:true.    
+    ] action:[ :status |
+        status stillAlive ifFalse:[
             exitStatus := status.
             pid := nil.
             exitSema signal.
         ].
+    ].
+    OperatingSystem closeFd:execFd.
+    pid notNil ifTrue:[
+        self fileDescriptor:myFd withMode:mode.
     ] ifFalse:[
-        pid := nil.
         lastErrorNumber := OperatingSystem currentErrorNumber.
         OperatingSystem closeFd:myFd.
     ].
@@ -439,6 +440,6 @@
 !PipeStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/PipeStream.st,v 1.50 1997-01-24 23:18:40 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/PipeStream.st,v 1.51 1997-03-25 12:48:30 stefan Exp $'
 ! !
 PipeStream initialize!