comment/format in:
authorStefan Vogel <sv@exept.de>
Tue, 30 Nov 2010 14:13:46 +0100
changeset 13152 78fdc9d96bc3
parent 13151 fa68de773733
child 13153 572dc11e2e96
comment/format in: #signal #signalOnce changed: #addWaitingProcess: #signalForAll #wakeupWaiters -- do not set waitingProcesses to nil
Semaphore.st
--- 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 $'
 ! !