|
Hi
I think that there's a bug in dupChan in
Chan.lhs
I tried the following program.
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
|
