[Haskell-cafe] Can't figure out source of race condition when using System.Process

David Roundy droundy at darcs.net
Sun Nov 2 16:01:14 EST 2008


On Sun, Nov 02, 2008 at 09:15:25PM +0100, Marc Weber wrote:
> On Mon, Nov 03, 2008 at 01:02:12AM +1100, Rafal Kolanski wrote:
> >  Rafal Kolanski.
> > -- Pass text to md5sum and drop the final "  -" when returning
> > hashMD5 text = do
> >     (inp,out,err,pid) <- runInteractiveProcess "md5sum" [] Nothing Nothing
> >     forkIO $ do 
> >         hPutStrLn inp text
> >         hClose inp
> >     exit <- waitForProcess pid
> >     case exit of ExitFailure _ -> error "md5sum fail" 
> >                  _ -> return ()
> > [...]
> 
> Why do you use forkIO here? It's not necessary. The process will run in
> background on its own. ?

It looks to me like this code requires a forkIO, not in the writing to inp,
but rather in the reading of out and err.  Otherwise, those buffers may
fill up and your process will hang...
-- 
David Roundy
http://www.darcs.net


More information about the Haskell-Cafe mailing list