Semaphore.st
branchjv
changeset 17814 b75a7f0c346b
parent 17807 06cc6c49e291
child 17834 04ff72c5039a
--- 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 $'
 ! !
 
 
 
 
+