On 2008 Oct 30, at 10:08, Johannes Waldmann wrote:
are there any known issues
with file handles/descriptors in ghc-compiled executables?

My program has a lot of calls to System.Process.runInteractiveProcess
and I'm running into unpredictable behaviour (sometimes the program
just silently dies, sometimes it gets stuck)

runInteractiveProcess returns 3 filehandles and a process handle. Either can cause problems: if you use too many filehandles, the select()-based mechanism in the Haskell runtime will fail (select() has a fairly low limit on filehandles as compared to poll(), epoll(), and other mechanisms); if you spawn too many subprocesses without reaping them (waitForProcess / getProcessExitCode) you will hit the child process limit and not be able to create new child processes.

A third problem is that you can deadlock if you write too much data without reading any back. Your best bet is to forkIO so input and output are independent.

Or perhaps you see anything that's wrong with my code here
http://dfa.imn.htwk-leipzig.de/cgi-bin/cvsweb/box/src/SMT/Time.hs?rev=1.9

And there's a fourth problem: you hGetContents after blocking waitForProcess. If the output is larger than the size of a pipe buffer (often 512 bytes), the subprocess will block waiting for the pipe to be read, while you're waiting for it to exit before reading from the pipe.

--
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] [EMAIL PROTECTED]
system administrator [openafs,heimdal,too many hats] [EMAIL PROTECTED]
electrical and computer engineering, carnegie mellon university    KF8NH


_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to