I've found a minimal test case that seems to demonstrate a bug in either MissingH or ghc's threaded runtime. Or I'm doing something stupid in fewer lines of code than usual. ;)
When built with the threaded runtime, after a short while it hangs in hGetContents. import System.Cmd import System.IO import System.Cmd.Utils import System.Posix.Process import Control.Monad main :: IO () main = forever $ pipeRead ["hello", "world"] pipeRead :: [String] -> IO () pipeRead params = do -- removing this next line avoids the hang somehow print $ "pipeRead in " ++ show params (p, h) <- hPipeFrom "echo" params print "pipeRead getcontents" c <- hGetContents h print $ "got: " ++ c _ <- getProcessStatus True False $ processID p -- removing this last line avoids the hang somehow print "pipeRead out" joey@wren:~>ghc --make -threaded test [1 of 1] Compiling Main ( test.hs, test.o ) Linking test ... joey@wren:~>./test "pipeRead in [\"hello\",\"world\"]" "pipeRead getcontents" "got: hello world\n" "pipeRead out" "pipeRead in [\"hello\",\"world\"]" "pipeRead getcontents" "got: hello world\n" "pipeRead out" <snip 20 repeats> "pipeRead in [\"hello\",\"world\"]" "pipeRead getcontents" <hang> Ghc 7.4.2, Debian Linux -- see shy jo _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe