view 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
line wrap: on
line source
table boo : { Client : client, Channel : channel unit }

fun doIt () =
    me <- self;
    ch <- channel;
    dml (INSERT INTO boo (Client, Channel) VALUES ({[me]}, {[ch]}));
    return <xml><body onload={let
                                  fun loop () =
                                      v <- recv ch;
                                      alert "Someone left";
                                      loop ()
                              in
                                  loop ()
                              end}/></xml>

task clientLeaves = fn cl =>
                       debug "Client left";
                       dml (DELETE FROM boo WHERE Client = {[cl]});
                       queryI (SELECT (boo.Channel)
                               FROM boo)
                       (fn r => send r.1 ());
                       debug "Done processing"

fun main () = return <xml><body>
  <form> <submit action={doIt}/> </form>
</body></xml>