
Michael Walker explained quite well why that's reasonable. What seems much
*less* reasonable is that the function masks exceptions right from the
start and all the way to the end. I don't see any reason to mask until
after calling getSystemEventManager_, or to remain masked after taking the
MVar.
On Thu, Jan 17, 2019 at 5:17 PM Andrew Martin
The definition of threadWait is:
threadWait :: Event http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Internal... -> Fd http://hackage.haskell.org/package/base-4.12.0.0/docs/src/System.Posix.Types... -> IO ()threadWait http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... evt http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... fd http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... = mask_ http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.IO.html#mask_ $ http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Base.html#%24 do m http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... <- newEmptyMVar http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.MVar.html#newE... mgr http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... <- getSystemEventManager_ http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... reg http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... <- registerFd http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Manager.... mgr http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... (\_ e http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... -> putMVar http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.MVar.html#putM... m http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... e http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h...) fd http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... evt http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... M.OneShot http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Internal... evt' http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... <- takeMVar http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.MVar.html#take... m http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... `onException http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.IO.html#onExce...` unregisterFd_ http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Manager.... mgr http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... reg http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... if evt' http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Thread.h... `eventIs http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Internal...` evtClose http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Event.Internal... then ioError http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.IO.Exception.h... $ http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Base.html#%24 errnoToIOError http://hackage.haskell.org/package/base-4.12.0.0/docs/src/Foreign.C.Error.ht... "threadWait" eBADF http://hackage.haskell.org/package/base-4.12.0.0/docs/src/Foreign.C.Error.ht... Nothing http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Maybe.html#Not... Nothing http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Maybe.html#Not... else return http://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.Base.html#retu... ()
Although the entire function has asynchronous exceptions masked, the call to takeMVar uses onException to deal with the possibility of an exception. According to the docs in Control.Concurrent, takeMVar can throw exceptions. But my understand (which may be wrong) is that the only exception this could throw would be something like BlockedIndefinitelyOnMVar, which I don't believe can happen here.
-- -Andrew Thaddeus Martin _______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries