class: UnixOperatingSystem::FileDescriptorHandle
no need to disable the signal after wait - it is done by ProcessorScheduler now
--- a/UnixOperatingSystem.st Fri May 16 09:00:05 2014 +0200
+++ b/UnixOperatingSystem.st Fri May 16 09:02:44 2014 +0200
@@ -11108,24 +11108,23 @@
|inputSema hasData wasBlocked|
fd isNil ifTrue:[^ self error:#errorNotOpen].
+ self canReadWithoutBlocking ifTrue:[
+ ^ false.
+ ].
wasBlocked := OperatingSystem blockInterrupts.
- hasData := self canReadWithoutBlocking.
- hasData ifFalse:[
- inputSema := Semaphore new name:'readWait'.
- [
- timeout notNil ifTrue:[
- Processor signal:inputSema afterMilliseconds:timeout
- ].
- Processor signal:inputSema onInput:fd.
- Processor activeProcess state:#ioWait.
- inputSema wait.
- Processor disableSemaphore:inputSema.
- hasData := self canReadWithoutBlocking.
- ] ifCurtailed:[
- Processor disableSemaphore:inputSema.
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ]
+ inputSema := Semaphore new name:'readWait'.
+ [
+ timeout notNil ifTrue:[
+ Processor signal:inputSema afterMilliseconds:timeout
+ ].
+ Processor signal:inputSema onInput:fd.
+ Processor activeProcess state:#ioWait.
+ inputSema wait.
+ hasData := self canReadWithoutBlocking.
+ ] ifCurtailed:[
+ Processor disableSemaphore:inputSema.
+ wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
].
wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
^ hasData not
@@ -11141,24 +11140,23 @@
|outputSema canWrite wasBlocked|
fd isNil ifTrue:[^ self error:#errorNotOpen].
+ self canWriteWithoutBlocking ifTrue:[
+ ^ false.
+ ].
wasBlocked := OperatingSystem blockInterrupts.
- canWrite := self canWriteWithoutBlocking.
- canWrite ifFalse:[
- outputSema := Semaphore new name:'writeWait'.
- [
- timeout notNil ifTrue:[
- Processor signal:outputSema afterMilliseconds:timeout
- ].
- Processor signal:outputSema onOutput:fd.
- Processor activeProcess state:#ioWait.
- outputSema wait.
- Processor disableSemaphore:outputSema.
- canWrite := self canWriteWithoutBlocking.
- ] ifCurtailed:[
- Processor disableSemaphore:outputSema.
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ]
+ outputSema := Semaphore new name:'writeWait'.
+ [
+ timeout notNil ifTrue:[
+ Processor signal:outputSema afterMilliseconds:timeout
+ ].
+ Processor signal:outputSema onOutput:fd.
+ Processor activeProcess state:#ioWait.
+ outputSema wait.
+ canWrite := self canWriteWithoutBlocking.
+ ] ifCurtailed:[
+ Processor disableSemaphore:outputSema.
+ wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
].
wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
^ canWrite not
@@ -13272,11 +13270,11 @@
!UnixOperatingSystem class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.361 2014-05-11 14:06:09 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.362 2014-05-16 07:02:44 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.361 2014-05-11 14:06:09 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.362 2014-05-16 07:02:44 stefan Exp $'
! !