Michael Stahl wrote:

here is the simplest thing i could come up with that has threads which are
blocked indefinitely but not gc'd.


This example isn't deadlocked: it just waits 10 seconds and then receives the BlockedIndefinitely exception. Can you construct an example that has a real deadlock that isn't detected?

Cheers,
        Simon


module Main where
import Control.Monad.STM
import Control.Concurrent.STM.TVar
import Control.Concurrent.STM.TChan
import Control.Concurrent

type Store' = TChan (TVar Int)

main = do
        (store,store') <- atomically $ do
                c <- newTChan
                c' <- dupTChan c
                v <- newTVar 0
                writeTChan c v
                return (c,c')
        forkIO $ rule store
        threadDelay 10000000 -- wait for termination
        print' store'
   where
        rule store = do
                x <- atomically $
                        readTChan store
                forkIO $ match x
                rule store
        match x = do
                atomically $ do
                        readTVar x
                        retry
        print' store = do
                x <- atomically $ do
                        v <- readTChan store
                        readTVar v
                print x
                print' store
_______________________________________________
Glasgow-haskell-users mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to