Break threads only after their output-queues have been drained.

This commit is contained in:
Tony Garnock-Jones 2011-10-26 00:06:29 -04:00
parent 29dd5226c2
commit 887aada203
1 changed files with 11 additions and 9 deletions

View File

@ -156,11 +156,16 @@
acc
(choice-evt acc
(let-values (((first rest) (dequeue (unbox qb))))
(handle-evt (channel-put-evt (binding-out-ch b)
first)
(lambda (dummy)
(set-box! qb rest)
(room-main state)))))))
(if (and (departed? first)
(binding-break-on-departure? b))
(begin (break-thread (binding-thread b))
never-evt)
(handle-evt (channel-put-evt
(binding-out-ch b)
first)
(lambda (dummy)
(set-box! qb rest)
(room-main state))))))))
(handle-evt (binding-in-ch b)
(lambda (message)
(room-main (handle-binding-message state b message))))
@ -231,7 +236,4 @@
(define (enqueue-message! b message)
(define qb (binding-queue-box b))
(if (and (departed? message)
(binding-break-on-departure? b))
(break-thread (binding-thread b))
(set-box! qb (enqueue (unbox qb) message))))
(set-box! qb (enqueue (unbox qb) message)))