[Haskell-cafe] Brackets and Asynchronous Exceptions
Andrew Gallagher
ajcg at CS.UCLA.EDU
Wed Apr 15 19:30:53 EDT 2009
Great. Thanks! This is exactly what I was looking for. Apparently this
issue is also described in the paper Asynchronous Exception in Haskell.
Thanks,
Andrew
On Wed, 15 Apr 2009, Jason Dagit wrote:
> On Wed, Apr 15, 2009 at 4:06 PM, Andrew Gallagher <ajcg at 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
>
More information about the Haskell-Cafe
mailing list