[Haskell-cafe] Re: catting to cat gets stuck at > 135K

Simon Marlow marlowsd at gmail.com
Thu Nov 27 08:51:05 EST 2008

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.


More information about the Haskell-Cafe mailing list