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