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

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to