On Wed, Feb 17, 2010 at 3:27 PM, Felipe Lessa <felipe.le...@gmail.com> wrote: > In acquire (l. 111), if the lock was already acquired it goes by > > | otherwise → do putMVar mv mb > Lock.acquire lock > > So it puts back the information about the owner of the RLock and > waits for its release in the normal Lock. And then... nothing? > Shouldn't it need to put into mv information about itself?
Well spotted! In order to fix this we changed the structure of an RLock a bit. The inner lock isn't contained in a Maybe anymore but directly in the MVar. So now there is only 1 Lock associated with an RLock. This makes reasoning about the control flow a bit simpler. We also added a test case which fails on the original code but succeeds with the new version. > In release (l. 142) Nothing is put into mv > > then do Lock.release lock > putMVar mv Nothing I'm not sure if that was a bug in the original. In the new version we put the lock back inside the MVar. Current version: http://hackage.haskell.org/package/concurrent-extra-0.1.0.1 Thanks, Roel _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe