[GHC] #767: withMVar family have a bug
GHC
trac at galois.com
Mon May 8 06:12:39 EDT 2006
#767: withMVar family have a bug
-------------------------+--------------------------------------------------
Reporter: simonmar | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 6.4.1
Severity: normal | Keywords:
Os: Unknown | Difficulty: Unknown
Architecture: Unknown |
-------------------------+--------------------------------------------------
{{{withMVar}}} is defined like this:
{{{
withMVar :: MVar a -> (a -> IO b) -> IO b
withMVar m io =
block $ do
a <- takeMVar m
b <- catch (unblock (io a))
(\e -> do putMVar m a; throw e)
putMVar m a
return b
}}}
unfortunately this has a (very rare) bug: {{{catch}}} can raise a stack
overflow exception, which would leave the {{{MVar}}} empty.
This is a tricky one. Perhaps in the event of a stack overflow, catch
should ensure that the exception is passed directly to its handler, and we
always add some extra stack space for the handler.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/767>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list