
Brandon S. Allbery KF8NH wrote:
On 2008 Nov 10, at 19:04, Jason Dusek wrote:
simple exe bytes args = do (i, o, e, p) <- runInteractiveProcess exe args Nothing Nothing hPut i bytes s <- hGetContents o hClose i return s
Yep, that's your problem. forkIO the hPut.
Maybe I didn't do enough here -- just wrapping in `forkIO` does not seem to actually help.
*sigh* I hate the ghc runtime... it works in ghci, or compiled with -threaded.
Would you hate it less if -threaded were the default?
Otherwise you still get the deadlock because it only switches threads under limited circumstances (garbage collections?)
No, the issue is that without real OS threads, a foreign call can't be pre-empted (pretty obvious when you think about it). waitForProcess ends up making a blocking foreign call - non-obvious, but at least it's documented. Cheers, Simon