[Haskell-cafe] Re: catting to cat gets stuck at > 135K
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
>>>> 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
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