HierarchicalList.st
changeset 1437 3ff0d67ec0af
parent 1431 0cc20a8f2f7c
child 1439 ddcd6e87e406
--- a/HierarchicalList.st	Thu Jul 08 11:27:25 1999 +0200
+++ b/HierarchicalList.st	Thu Jul 08 13:26:59 1999 +0200
@@ -228,6 +228,22 @@
 
 !
 
+monitoringCycle
+    "the block evaluated
+    "
+    |index item|
+
+    item  := root.
+    index := showRoot ifTrue:[1] ifFalse:[0].
+
+    [item notNil] whileTrue:[
+        item monitoringCycle.
+        Processor yield.
+        index := index + 1.
+        item  := self at:index ifAbsent:nil.
+    ]
+!
+
 removeDependent:anObject
     "stop the monitoringTask if no more dependencies exists
     "
@@ -242,47 +258,21 @@
 startMonitoringTask
     "start the monitoring task; success only if dependencies exists
     "
-    |task|
-
     (     monitoringTask      isNil
      and:[monitoringTaskDelay notNil
      and:[dependents size ~~ 0]]
     ) ifTrue:[
-        task := monitoringTask := [|index item delay|
-            index := showRoot ifTrue:[1] ifFalse:[0].
-
-            [true] whileTrue:[
-                item := index == 0 ifTrue:[root]
-                                  ifFalse:[self at:index ifAbsent:nil].
-
-                item isNil ifTrue:[
-                    delay := self monitoringTaskDelay.
-
-                    delay isNil ifTrue:[                "/ process might terminate
-                        task ~~ monitoringTask ifTrue:[
-                            self terminate
-                        ].
-                        Processor yield
-                    ] ifFalse:[
-                        Delay waitForSeconds:delay.
-
-                        task ~~ monitoringTask ifTrue:[ "/ task has changed
-                            self terminate
-                        ]
-                    ].
-                    index := showRoot ifTrue:[1] ifFalse:[0].
-                ] ifFalse:[
-                    item monitoringCycle.
-                    Processor yield.
-                    index := index + 1.
-                ]
+        monitoringTask := [|delay|
+            [(delay := self monitoringTaskDelay) notNil] whileTrue:[
+                self monitoringCycle.
+                Delay waitForSeconds:delay.
             ]
         ] forkAt:4.
+
+        monitoringTask addExitAction:[ monitoringTask := nil ].
     ].
     ^ true.
 
-
-
 !
 
 stopMonitoringTask
@@ -331,5 +321,5 @@
 !HierarchicalList class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/HierarchicalList.st,v 1.3 1999-07-06 16:49:23 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/HierarchicalList.st,v 1.4 1999-07-08 11:26:59 cg Exp $'
 ! !