Fix mailbox-get-all, and make mailbox timeouts throw a wait-timeout error instead of a string
parent
52060e6253
commit
1023fa51f4
|
@ -20,10 +20,12 @@ IN: concurrency.conditions
|
||||||
]
|
]
|
||||||
] dip later ;
|
] dip later ;
|
||||||
|
|
||||||
|
ERROR: wait-timeout ;
|
||||||
|
|
||||||
: wait ( queue timeout status -- )
|
: wait ( queue timeout status -- )
|
||||||
over [
|
over [
|
||||||
[ queue-timeout [ drop ] ] dip suspend
|
[ queue-timeout [ drop ] ] dip suspend
|
||||||
[ "Timeout" throw ] [ cancel-alarm ] if
|
[ wait-timeout ] [ cancel-alarm ] if
|
||||||
] [
|
] [
|
||||||
[ drop '[ _ push-front ] ] dip suspend drop
|
[ drop '[ _ push-front ] ] dip suspend drop
|
||||||
] if ;
|
] if ;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
IN: concurrency.mailboxes.tests
|
IN: concurrency.mailboxes.tests
|
||||||
USING: concurrency.mailboxes concurrency.count-downs vectors
|
USING: concurrency.mailboxes concurrency.count-downs concurrency.conditions
|
||||||
sequences threads tools.test math kernel strings namespaces
|
vectors sequences threads tools.test math kernel strings namespaces
|
||||||
continuations calendar destructors ;
|
continuations calendar destructors ;
|
||||||
|
|
||||||
{ 1 1 } [ [ integer? ] mailbox-get? ] must-infer-as
|
{ 1 1 } [ [ integer? ] mailbox-get? ] must-infer-as
|
||||||
|
@ -75,3 +75,15 @@ continuations calendar destructors ;
|
||||||
[ ] [ "d" get 5 seconds await-timeout ] unit-test
|
[ ] [ "d" get 5 seconds await-timeout ] unit-test
|
||||||
|
|
||||||
[ ] [ "m" get dispose ] unit-test
|
[ ] [ "m" get dispose ] unit-test
|
||||||
|
|
||||||
|
[ { "foo" "bar" } ] [
|
||||||
|
<mailbox>
|
||||||
|
"foo" over mailbox-put
|
||||||
|
"bar" over mailbox-put
|
||||||
|
mailbox-get-all
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[
|
||||||
|
<mailbox> 1 seconds mailbox-get-timeout
|
||||||
|
] [ wait-timeout? ] must-fail-with
|
||||||
|
|
|
@ -49,7 +49,7 @@ M: mailbox dispose* threads>> notify-all ;
|
||||||
|
|
||||||
: mailbox-get-all-timeout ( mailbox timeout -- array )
|
: mailbox-get-all-timeout ( mailbox timeout -- array )
|
||||||
block-if-empty
|
block-if-empty
|
||||||
[ dup mailbox-empty? ]
|
[ dup mailbox-empty? not ]
|
||||||
[ dup data>> pop-back ]
|
[ dup data>> pop-back ]
|
||||||
produce nip ;
|
produce nip ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue