Re: [GHC] #5902: Cannot tell from an exception handler whether the exception was asynchronous

#5902: Cannot tell from an exception handler whether the exception was asynchronous -------------------------------------+------------------------------------ Reporter: simonmar | Owner: simonmar Type: bug | Status: new Priority: normal | Milestone: 7.8.1 Component: Compiler | Version: 7.4.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: -------------------------------------+------------------------------------ Comment (by simonmar): `newCatch` doesn't work for `bracket`. Consider: {{{ bracket before after thing = mask $ \restore -> do a <- before r <- restore (thing a) `onException` after a _ <- after a return r }}} Now, when the async exception is received, `onException` runs the exception handler (`after a`), which cleans up whatever resource was allocated by `before`. But when this this resumed after the async exception, if `onException` is using `newCatch`/`newThrow`, it would re- run `restore (thing a)`, which assumes that the resource is present and accessible. So while it might make sense to re-run the whole `unsafePerformIO` when we resume after an async exception, it certainly doesn't make sense to do it at a finer granularity. We don't want most exception-handlers to be resumable. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/5902#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC