diff -r 8012b3ceb14b -r b75a7f0c346b Semaphore.st --- a/Semaphore.st Tue Nov 30 15:53:23 2010 +0000 +++ b/Semaphore.st Mon Dec 20 07:13:27 2010 +0000 @@ -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,17 +923,18 @@ !Semaphore class methodsFor:'documentation'! version - ^ '$Id: Semaphore.st 10590 2010-11-09 16:24:28Z vranyj1 $' + ^ '$Id: Semaphore.st 10602 2010-12-20 07:13:27Z vranyj1 $' ! 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 ' ! version_SVN - ^ '$Id: Semaphore.st 10590 2010-11-09 16:24:28Z vranyj1 $' + ^ '$Id: Semaphore.st 10602 2010-12-20 07:13:27Z vranyj1 $' ! ! +