wakup readWaiters in case of errors
authorClaus Gittinger <cg@exept.de>
Thu, 29 Aug 1996 22:52:10 +0200
changeset 1641 4adf4b8dad17
parent 1640 db4aef0f601b
child 1642 91c6860f1c9d
wakup readWaiters in case of errors
ProcSched.st
ProcessorScheduler.st
--- a/ProcSched.st	Thu Aug 29 16:29:55 1996 +0200
+++ b/ProcSched.st	Thu Aug 29 22:52:10 1996 +0200
@@ -1923,7 +1923,7 @@
       readFdArray/writeFdArray in the debugger)"
 
     readFdArray keysAndValuesDo:[:idx :fd |
-        |rslt|
+        |rslt sema|
 
         rslt := OperatingSystem
                     selectOnAnyReadable:(Array with:fd)
@@ -1934,12 +1934,16 @@
         (rslt isNil and:[OperatingSystem lastErrorSymbol == #EBADF]) ifTrue:[
             ('PROCESSOR: removing invalid read fileDescriptor: ' , fd printString) errorPrintNL.
             readFdArray at:idx put:nil.
-            OperatingSystem clearLastErrorNumber
+            OperatingSystem clearLastErrorNumber.
+            (sema := readSemaphoreArray at:idx) notNil ifTrue:[
+                readSemaphoreArray at:idx put:nil.
+                sema signal.
+            ].
         ]
     ].
 
     writeFdArray keysAndValuesDo:[:idx :fd |
-        |rslt|
+        |rslt sema|
 
         rslt := OperatingSystem
                     selectOnAnyReadable:nil
@@ -1950,12 +1954,16 @@
         (rslt isNil and:[OperatingSystem lastErrorSymbol == #EBADF]) ifTrue:[
             ('PROCESSOR: removing invalid write fileDescriptor: ' , fd printString) errorPrintNL.
             writeFdArray at:idx put:nil.
-            OperatingSystem clearLastErrorNumber
+            OperatingSystem clearLastErrorNumber.
+            (sema := writeSemaphoreArray at:idx) notNil ifTrue:[
+                writeSemaphoreArray at:idx put:nil.
+                sema signal.
+            ].
         ]
     ].
 
     "Modified: 12.4.1996 / 09:32:58 / stefan"
-    "Modified: 24.7.1996 / 16:55:47 / cg"
+    "Modified: 29.8.1996 / 22:42:28 / cg"
 !
 
 schedulerInterrupt
@@ -2096,6 +2104,6 @@
 !ProcessorScheduler  class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/ProcSched.st,v 1.88 1996-08-14 13:47:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/ProcSched.st,v 1.89 1996-08-29 20:52:10 cg Exp $'
 ! !
 ProcessorScheduler initialize!
--- a/ProcessorScheduler.st	Thu Aug 29 16:29:55 1996 +0200
+++ b/ProcessorScheduler.st	Thu Aug 29 22:52:10 1996 +0200
@@ -1923,7 +1923,7 @@
       readFdArray/writeFdArray in the debugger)"
 
     readFdArray keysAndValuesDo:[:idx :fd |
-        |rslt|
+        |rslt sema|
 
         rslt := OperatingSystem
                     selectOnAnyReadable:(Array with:fd)
@@ -1934,12 +1934,16 @@
         (rslt isNil and:[OperatingSystem lastErrorSymbol == #EBADF]) ifTrue:[
             ('PROCESSOR: removing invalid read fileDescriptor: ' , fd printString) errorPrintNL.
             readFdArray at:idx put:nil.
-            OperatingSystem clearLastErrorNumber
+            OperatingSystem clearLastErrorNumber.
+            (sema := readSemaphoreArray at:idx) notNil ifTrue:[
+                readSemaphoreArray at:idx put:nil.
+                sema signal.
+            ].
         ]
     ].
 
     writeFdArray keysAndValuesDo:[:idx :fd |
-        |rslt|
+        |rslt sema|
 
         rslt := OperatingSystem
                     selectOnAnyReadable:nil
@@ -1950,12 +1954,16 @@
         (rslt isNil and:[OperatingSystem lastErrorSymbol == #EBADF]) ifTrue:[
             ('PROCESSOR: removing invalid write fileDescriptor: ' , fd printString) errorPrintNL.
             writeFdArray at:idx put:nil.
-            OperatingSystem clearLastErrorNumber
+            OperatingSystem clearLastErrorNumber.
+            (sema := writeSemaphoreArray at:idx) notNil ifTrue:[
+                writeSemaphoreArray at:idx put:nil.
+                sema signal.
+            ].
         ]
     ].
 
     "Modified: 12.4.1996 / 09:32:58 / stefan"
-    "Modified: 24.7.1996 / 16:55:47 / cg"
+    "Modified: 29.8.1996 / 22:42:28 / cg"
 !
 
 schedulerInterrupt
@@ -2096,6 +2104,6 @@
 !ProcessorScheduler  class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.88 1996-08-14 13:47:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.89 1996-08-29 20:52:10 cg Exp $'
 ! !
 ProcessorScheduler initialize!