diff options
author | Adam Chlipala <adamc@hcoop.net> | 2009-04-16 13:00:40 -0400 |
---|---|---|
committer | Adam Chlipala <adamc@hcoop.net> | 2009-04-16 13:00:40 -0400 |
commit | e65c023309173aa291952143537f174888a8de86 (patch) | |
tree | 517b9c66d187dc97c0e7fbe181f43d9fefbef929 /tests/roundTrip.ur | |
parent | d52fbe487bb29a4a60dcca1d36e9dadc64917517 (diff) |
Avoid thread death via message receive
Diffstat (limited to 'tests/roundTrip.ur')
-rw-r--r-- | tests/roundTrip.ur | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/roundTrip.ur b/tests/roundTrip.ur new file mode 100644 index 00000000..26a0113e --- /dev/null +++ b/tests/roundTrip.ur @@ -0,0 +1,36 @@ +table channels : { Client : client, Channel : channel (string * int * float) } + PRIMARY KEY Client + +fun writeBack v = + me <- self; + r <- oneRow (SELECT channels.Channel FROM channels WHERE channels.Client = {[me]}); + send r.Channels.Channel v + +fun main () = + me <- self; + ch <- channel; + dml (INSERT INTO channels (Client, Channel) VALUES ({[me]}, {[ch]})); + + buf <- Buffer.create; + + let + fun receiverA () = + v <- recv ch; + Buffer.write buf ("A:(" ^ v.1 ^ ", " ^ show v.2 ^ ", " ^ show v.3 ^ ")"); + receiverA () + + fun receiverB () = + v <- recv ch; + Buffer.write buf ("B:(" ^ v.1 ^ ", " ^ show v.2 ^ ", " ^ show v.3 ^ ")"); + error <xml>Bail out!</xml>; + receiverB () + + fun sender s n f = + sleep 9; + writeBack (s, n, f); + sender (s ^ "!") (n + 1) (f + 1.23) + in + return <xml><body onload={spawn (receiverA ()); spawn (receiverB ()); sender "" 0 0.0}> + <dyn signal={Buffer.render buf}/> + </body></xml> + end |