
#8006: Asynchronous exception rethrown synchronously inside runStmt ---------------------------------+------------------------------------------ Reporter: edsko | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: None/Unknown Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Comment(by simonmar): Simon - normally a thunk is frozen when hit by an asynchronous exception, but the problem is when we have an `unsafePerformIO` or `unsafeInterleaveIO` inside the thunk, and the IO code catches the asynchronous exception and re-throws it. When it re-throws the exception there are two options: * re-throw it as a synchronous exception. But then any enclosing thunks will capture the exception. This is what happens right now in the typechecker and other parts of GHC; it's the bug we want to fix. * re-throw the exception asynchronously. You can do this by calling `throwTo` passing your own `ThreadId`. Leaving aside the question of how you know that the original exception was asynchronous (which we don't have a good answer to, see #5902), the problem here is that when the current execution is resumed in the future, `throwTo` will ''return'', and then you have to figure out what to do: re-execute the whole operation, or something else? Hope that helps. -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/8006#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler