comment/format in:
#signal
#signalOnce
changed:
#addWaitingProcess:
#signalForAll
#wakeupWaiters
-- do not set waitingProcesses to nil
--- a/Semaphore.st Mon Nov 29 19:48:07 2010 +0100
+++ b/Semaphore.st Tue Nov 30 14:13:46 2010 +0100
@@ -366,7 +366,7 @@
waitingProcesses isNil ifTrue:[
waitingProcesses := Array with:aProcess
] ifFalse:[
- waitingProcesses class == Array ifTrue:[
+ waitingProcesses isArray ifTrue:[
waitingProcesses := OrderedCollection withAll:waitingProcesses.
].
waitingProcesses add:aProcess.
@@ -413,13 +413,14 @@
NOTE: Must be called when known that waitingProcesses is nonNil and
also with blocked interrupts"
- |q|
+ |processes|
- q := waitingProcesses.
- waitingProcesses := nil.
+ processes := waitingProcesses.
+"/ do not set to nil - a waiting process may be suspended and will not be resumed...
+"/ waitingProcesses := nil.
"/ todo: resume by priority; higher first.
- q do:[:each | Processor resume:each].
+ processes do:[:eachProcess | Processor resume:eachProcess].
! !
!Semaphore methodsFor:'private-accessing'!
@@ -540,7 +541,7 @@
|wasBlocked|
- waitingProcesses size ~~ 0 ifTrue:[
+ waitingProcesses notNil ifTrue:[
wasBlocked := OperatingSystem blockInterrupts.
[
|processes|
@@ -549,11 +550,13 @@
(in case one has higher prio and goes into a wait immediately again.)"
processes := waitingProcesses.
- waitingProcesses := nil.
- processes do:[:eachWaitingProcess|
- count := count + 1.
- Processor makeRunnable:eachWaitingProcess.
- ].
+ processes size ~~ 0 ifTrue:[
+ waitingProcesses := nil.
+ processes do:[:eachWaitingProcess|
+ count := count + 1.
+ Processor makeRunnable:eachWaitingProcess.
+ ].
+ ].
] ensure:[
wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
].
@@ -920,9 +923,9 @@
!Semaphore class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Semaphore.st,v 1.83 2010-02-05 12:58:06 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Semaphore.st,v 1.84 2010-11-30 13:13:46 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/Semaphore.st,v 1.83 2010-02-05 12:58:06 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Semaphore.st,v 1.84 2010-11-30 13:13:46 stefan Exp $'
! !