On 12/10/2011 12:24, Bertram Felgenhauer wrote:
Jean-Marie Gaillourdet wrote:
This is my previous program with your workaround, it is also attached as
TypeRepEqLock.hs
[snip]
Compile and execute:
$ ghc-7.0.3 -threaded -rtsopts TypeRepEqLock.hs
<snip>
$ while true ; do ./TypeRepEqLock +RTS -N ; done
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Ok
TypeRepEqLock: thread blocked indefinitely in an MVar operation
Ok
Ok
Ok
^C^C
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 think it should work. Could you make a ticket for it please?
Cheers,
Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users