Mercurial > urweb
annotate tests/goodbye.ur @ 2297:6d56080f495c
Fix a read-after-free bug using a timestamp check
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Thu, 19 Nov 2015 13:18:58 -0500 |
parents | c05e2e4bdde7 |
children |
rev | line source |
---|---|
adam@1707 | 1 table boo : { Client : client, Channel : channel unit } |
adam@1707 | 2 |
adam@1707 | 3 fun doIt () = |
adam@1707 | 4 me <- self; |
adam@1707 | 5 ch <- channel; |
adam@1707 | 6 dml (INSERT INTO boo (Client, Channel) VALUES ({[me]}, {[ch]})); |
adam@1707 | 7 return <xml><body onload={let |
adam@1707 | 8 fun loop () = |
adam@1707 | 9 v <- recv ch; |
adam@1707 | 10 alert "Someone left"; |
adam@1707 | 11 loop () |
adam@1707 | 12 in |
adam@1707 | 13 loop () |
adam@1707 | 14 end}/></xml> |
adam@1707 | 15 |
adam@1707 | 16 task clientLeaves = fn cl => |
adam@1707 | 17 debug "Client left"; |
adam@1707 | 18 dml (DELETE FROM boo WHERE Client = {[cl]}); |
adam@1707 | 19 queryI (SELECT (boo.Channel) |
adam@1707 | 20 FROM boo) |
adam@1707 | 21 (fn r => send r.1 ()); |
adam@1707 | 22 debug "Done processing" |
adam@1707 | 23 |
adam@1707 | 24 fun main () = return <xml><body> |
adam@1707 | 25 <form> <submit action={doIt}/> </form> |
adam@1707 | 26 </body></xml> |