]> gitweb.factorcode.org Git - factor.git/commitdiff
io.monitors.recursive: fix hang introduced by recent io.monitors change
authorSlava Pestov <slava@factorcode.org>
Fri, 19 Feb 2010 12:36:12 +0000 (07:36 -0500)
committerSlava Pestov <slava@factorcode.org>
Fri, 19 Feb 2010 12:36:12 +0000 (07:36 -0500)
basis/io/monitors/recursive/recursive.factor

index 83c088e8824e023734eadb22c8398623b2f436a8..b573e2fa2b43f49b72cae37d35f512e94cee9508 100644 (file)
@@ -39,17 +39,19 @@ DEFER: add-child-monitor
 : remove-child-monitor ( monitor -- )
     monitor tget children>> delete-at* [ dispose ] [ drop ] if ;
 
+SYMBOL: +stop+
+
 M: recursive-monitor dispose*
-    [ "stop" swap thread>> send-synchronous drop ]
-    [ call-next-method ]
-    bi ;
+    [ [ +stop+ ] dip thread>> send ] [ call-next-method ] bi ;
 
 : stop-pump ( -- )
     monitor tget children>> values dispose-each ;
 
 : pump-step ( msg -- )
-    [ [ monitor>> path>> ] [ path>> ] bi append-path ] [ changed>> ] bi
-    monitor tget queue-change ;
+    monitor tget disposed>> [ drop ] [
+        [ [ monitor>> path>> ] [ path>> ] bi append-path ] [ changed>> ] bi
+        monitor tget queue-change
+    ] if ;
 
 : child-added ( path monitor -- )
     path>> prepend-path add-child-monitor ;
@@ -69,8 +71,8 @@ M: recursive-monitor dispose*
     ] with with each ;
 
 : pump-loop ( -- )
-    receive dup synchronous? [
-        [ stop-pump t ] dip reply-synchronous
+    receive dup +stop+ eq? [
+        drop stop-pump
     ] [
         [ '[ _ update-hierarchy ] ignore-errors ] [ pump-step ] bi
         pump-loop