
#8804: BlockedIndefinitelyOnMVar thrown for an MVar which is still weakly accessible from another thread ------------------------------------------------+-------------------------- Reporter: bholst | Owner: Type: bug | simonmar Priority: normal | Status: closed Component: Runtime System | Milestone: Resolution: invalid | Version: 7.6.3 Operating System: Unknown/Multiple | Keywords: Type of failure: Incorrect result at runtime | Architecture: Test Case: | Unknown/Multiple Blocking: | Difficulty: | Unknown | Blocked By: | Related Tickets: ------------------------------------------------+-------------------------- Comment (by ezyang): I suspect you typoed, because `my` becomes dead immediately in your code. An MVar will not keep a thread alive unless the thread is blocked on it. If you force the thread to be live it will not get the exception raised, since the thread now retains the MVar. {{{ import Control.Concurrent import System.Mem.Weak import Data.Maybe import Control.Monad import Foreign.StablePtr main = do my <- myThreadId newStablePtr my m <- newEmptyMVar w <- mkWeakMVar m (return ()) _ <- forkIO $ do threadDelay 1000000 n <- deRefWeak w when (isJust n) $ putMVar (fromJust n) () takeMVar m }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8804#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler