]> gitweb.factorcode.org Git - factor.git/commitdiff
Fix mailbox-get-all, and make mailbox timeouts throw a wait-timeout error instead...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sun, 5 Apr 2009 04:04:53 +0000 (23:04 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sun, 5 Apr 2009 04:04:53 +0000 (23:04 -0500)
basis/concurrency/conditions/conditions.factor
basis/concurrency/mailboxes/mailboxes-tests.factor
basis/concurrency/mailboxes/mailboxes.factor

index 11e624110c634e790eb1d88cd4ba41f20c84da91..ad00bbdfa9ff262ca7f36af3248efc478c81f4c5 100644 (file)
@@ -20,10 +20,12 @@ IN: concurrency.conditions
         ]\r
     ] dip later ;\r
 \r
+ERROR: wait-timeout ;\r
+\r
 : wait ( queue timeout status -- )\r
     over [\r
         [ queue-timeout [ drop ] ] dip suspend\r
-        [ "Timeout" throw ] [ cancel-alarm ] if\r
+        [ wait-timeout ] [ cancel-alarm ] if\r
     ] [\r
         [ drop '[ _ push-front ] ] dip suspend drop\r
     ] if ;\r
index 64971eeb77c95f7b45322d4987efd1bd4038a9d2..81e54f18078d907f7740ec97dafd371140eaf837 100644 (file)
@@ -1,6 +1,6 @@
 IN: concurrency.mailboxes.tests\r
-USING: concurrency.mailboxes concurrency.count-downs vectors\r
-sequences threads tools.test math kernel strings namespaces\r
+USING: concurrency.mailboxes concurrency.count-downs concurrency.conditions\r
+vectors sequences threads tools.test math kernel strings namespaces\r
 continuations calendar destructors ;\r
 \r
 { 1 1 } [ [ integer? ] mailbox-get? ] must-infer-as\r
@@ -75,3 +75,15 @@ continuations calendar destructors ;
 [ ] [ "d" get 5 seconds await-timeout ] unit-test\r
 \r
 [ ] [ "m" get dispose ] unit-test\r
+\r
+[ { "foo" "bar" } ] [\r
+    <mailbox>\r
+    "foo" over mailbox-put\r
+    "bar" over mailbox-put\r
+    mailbox-get-all\r
+] unit-test\r
+\r
+[\r
+    <mailbox> 1 seconds mailbox-get-timeout\r
+] [ wait-timeout? ] must-fail-with\r
+    
\ No newline at end of file
index f6aec94b4140de12537dbc0e9e8a83bfe3c79a51..200adb14aea9148793785c66458504ce70e6e8e7 100755 (executable)
@@ -49,7 +49,7 @@ M: mailbox dispose* threads>> notify-all ;
 \r
 : mailbox-get-all-timeout ( mailbox timeout -- array )\r
     block-if-empty\r
-    [ dup mailbox-empty? ]\r
+    [ dup mailbox-empty? not ]\r
     [ dup data>> pop-back ]\r
     produce nip ;\r
 \r