Final bikeshedding call: Fixing Control.Exception.bracket

Ganesh Sittampalam ganesh at earth.li
Wed Nov 19 23:07:04 UTC 2014


On 13/11/2014 10:44, Simon Marlow wrote:
> On 13/11/2014 07:47, Merijn Verstraaten wrote:

>> A new version would look like:
>>
>> bracket before after thing =
>>    mask $ \restore -> do
>>      let atomicAfter = uninterruptibleMask . after
>>      a <- before
>>      r <- restore (thing a) `onException` atomicAfter a
>>      _ <- atomicAfter a
>>      return r
>>
>> Slightly different versions are possible and the other relevant
>> bracketing functions mentioned in this thread can be treated similarly.
> 
> Since we would need this for catch too, the sensible thing to do (if we
> decide to go ahead with this) would be to change the implementation of
> catch in the RTS from masking the exception handler to
> uninterruptibleMask.  That would mean that at least for catch there
> would be no additional overhead, and it would make the modifications to
> the other operations simpler in some cases.

If this isn't done in the RTS, is there a possibility of an async
exception slipping in between the exception handler starting and the
uninterruptibleMask starting?

Cheers,

Ganesh


More information about the Libraries mailing list