Fixe race when waiting for SIGCHLD.
--- 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!