Break threads only after their output-queues have been drained.
This commit is contained in:
parent
29dd5226c2
commit
887aada203
|
@ -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))))
|
|
||||||
|
|
Loading…
Reference in New Issue