
#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: | ---------------------------------+------------------------------------------ Changes (by simonmar): * difficulty: => Unknown Comment: Thanks for looking into this. I expect you're right that it's infeasible to figure out what to do when `throwTo` returns. I would be OK with a solution that did all the lazy loading of interface files first before running the snippet, as long as we can be reasonably sure that it works. (that is, not just "I tried it and it seems to work", but asking somebody who has a reasonable idea of where we do all the `unsafePerformIO`s, i.e., simonpj). I'm not sure, but I think that we might lazily read in `IdInfo` from the interface file, so poking on the arity of an `Id` might cause an `unsafePerformIO` to happen, and that would be outside of the typechecker. A couple of other approaches spring to mind: * make `forkM` be `forkIO` (or `async`). I don't know how much overhead that would entail, though. We could try it. * put a `mask_` inside `forkM`. Perhaps `uninterruptibleMask` is justified in this case, since it's hard to guarantee that we don't have any interruptible operations, yet we're reasonably sure that it shouldn't block. However, that might mean we couldn't ^C the typechecker if it looped... -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/8006#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler