From 85f3c69c70b28912c6b8f2b62ecc82bbefdff98b Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 7 Apr 2010 20:40:13 -0400 Subject: [PATCH] io.monitors.recursive: don't bomb if a dsubordinate monitor is disposed of --- basis/io/monitors/recursive/recursive.factor | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/basis/io/monitors/recursive/recursive.factor b/basis/io/monitors/recursive/recursive.factor index b573e2fa2b..70daed9018 100644 --- a/basis/io/monitors/recursive/recursive.factor +++ b/basis/io/monitors/recursive/recursive.factor @@ -1,9 +1,10 @@ -! Copyright (C) 2008, 2009 Slava Pestov. +! Copyright (C) 2008, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors sequences assocs arrays continuations destructors combinators kernel threads concurrency.messaging concurrency.mailboxes concurrency.promises io.files io.files.info -io.directories io.pathnames io.monitors debugger fry ; +io.directories io.pathnames io.monitors io.monitors.private +debugger fry ; IN: io.monitors.recursive ! Simulate recursive monitors on platforms that don't have them @@ -71,12 +72,14 @@ M: recursive-monitor dispose* ] with with each ; : pump-loop ( -- ) - receive dup +stop+ eq? [ - drop stop-pump - ] [ - [ '[ _ update-hierarchy ] ignore-errors ] [ pump-step ] bi - pump-loop - ] if ; + receive { + { [ dup +stop+ eq? ] [ drop stop-pump ] } + { [ dup monitor-disposed eq? ] [ drop ] } + [ + [ '[ _ update-hierarchy ] ignore-errors ] [ pump-step ] bi + pump-loop + ] + } cond ; : monitor-ready ( error/t -- ) monitor tget ready>> fulfill ;