Hi I think that there's a bug in dupChan in Chan.lhs I tried the following program. main = do chan <- newChan ch <- dupChan chan writeChan chan "done" x <- readChan chan y <- readChan ch prnt ("Got "++x ++" "++y) Now if I remember correctly this should print "Got done done". Instead it exits with C:\Test\test.exe: no threads to run: infinite loop or deadlock? I looked for the code for dupChan in hslibs and it says dupChan :: Chan a -> IO (Chan a) dupChan (Chan _read write) = do new_read <- newEmptyMVar hole <- readMVar write putMVar new_read hole return (Chan new_read write) Shouldn't this instead be dupChan :: Chan a -> IO (Chan a) dupChan (Chan _read write) = do new_read <- newEmptyMVar hole <- readMVar write putMVar new_read hole ** putMVar write hole ** return (Chan new_read write) That's at least what the Concurrent haskell paper says. Hugs 98 seems to have the same bug with its library. Meurig
participants (1)
-
Meurig Sage