[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.
Cheers,
Simon
More information about the Haskell-Cafe
mailing list