Hi Bertram, On 12.10.2011, at 13:24, Bertram Felgenhauer wrote:
> This has nothing to do with Data.Typeable though - it appears to be some > interaction between unsaferPerformIO and MVars that I do not understand. > The following program occasionally terminates with "thread blocked > indefinitely in an MVar operation", too (tested on ghc 7.0.3 and 7.2.1): > > import Control.Concurrent > import Control.Exception > import Control.Monad > import System.IO.Unsafe > > main :: IO () > main = do > -- evaluate lock -- adding this line fixes the problem > > fin1 <- newEmptyMVar > fin2 <- newEmptyMVar > > forkIO $ ping >>= putMVar fin1 > forkIO $ ping >>= putMVar fin2 > > takeMVar fin1 > takeMVar fin2 > > {-# NOINLINE lock #-} > lock :: MVar () > lock = unsafePerformIO $ newMVar () > > ping = do > () <- takeMVar lock > putMVar lock () > > Since I don't yet understand why this blocks, I cannot say whether it > should work or not. I've seen blocks with GHC 6.12.1, but I never got one with 7.0.3 and 7.2.1. Probably, bad luck on my side. ;-) Cheers, Jean _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users