On Wed, Apr 15, 2009 at 4:06 PM, Andrew Gallagher <a...@cs.ucla.edu> wrote: > Hi, > > In a program I am writing, I have many locations where I acquire a resource, > perform an operation with it, then release it. I have been using the > 'bracket' function so that the "release" operation would be performed even > if the operation threw an exception. This seems to work nicely. > > In the event of an asynchronous exception, however, is there a possible > scenario where a release is not performed after an acquire? > > Looking at the example given in bracket documentation: > > bracket > (openFile "filename" ReadMode) > (hClose) > (\fileHandle -> do { ... }) > > Is it possbile that an asynchronous exception could be raised in this thread > after openFile executes but *before* the appropriate handlers are installed > and the operation is run, preventing hClose from executing? > > If 'bracket' does not handle this case, should I be using the block/unblock > functions to disable asynchronous exceptions: > > block > (bracket > (openFile "filename" ReadMode) > (hClose) > (\fileHandle -> do > unblock > ({ ... })))
Does this answer your question? http://haskell.org/ghc/docs/latest/html/libraries/base/src/Control-Exception-Base.html#bracket If so, I found it by going to haskell.org/hoogle searching for bracket and then following the haddock "Source" to the definition. I hope that helps! Jason _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe