Mercurial > urweb
diff src/effectize.sml @ 1438:b6df00ed536c
Fix soundness bug in Effectize, which lead to missing effects in event handlers
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Fri, 18 Mar 2011 09:46:24 -0400 |
parents | 66092ce45a76 |
children | e15234fbb163 |
line wrap: on
line diff
--- a/src/effectize.sml Fri Mar 18 09:12:55 2011 -0400 +++ b/src/effectize.sml Fri Mar 18 09:46:24 2011 -0400 @@ -97,13 +97,13 @@ case #1 d of DVal (x, n, t, e, s) => let - val e = dejs e + val e' = dejs e in - (d, (if couldWrite writers e then + (d, (if couldWrite writers e' then IM.insert (writers, n, (#2 d, s)) else writers, - if couldReadCookie readers e then + if couldReadCookie readers e' then IM.insert (readers, n, (#2 d, s)) else readers, @@ -117,16 +117,16 @@ fun oneRound evs = foldl (fn ((_, n, _, e, s), (changed, (writers, readers, pushers))) => let - val e = dejs e + val e' = dejs e val (changed, writers) = - if couldWrite writers e andalso not (IM.inDomain (writers, n)) then + if couldWrite writers e' andalso not (IM.inDomain (writers, n)) then (true, IM.insert (writers, n, (#2 d, s))) else (changed, writers) val (changed, readers) = - if couldReadCookie readers e andalso not (IM.inDomain (readers, n)) then + if couldReadCookie readers e' andalso not (IM.inDomain (readers, n)) then (true, IM.insert (readers, n, (#2 d, s))) else (changed, readers)