After much study I have a new theory. It appears that the pipe machinery is working fine, but that sometimes my program fails to "reap" all of its terminated child processes. I'm using a `sigCHLD` signal handler that does `getAnyProcessStatus True False` each time it's invoked. It seems that one or more `sigCHLD` signals are occurring while an instance of the handler is already running (having presumably blocked `sigCHLD` during its execution), and hence the "contemporaneous" signals are getting lost. (Oh, and it seems this unfortunate behavior occurs for me under Linux but not Solaris.)
How can I avoid losing `sigCHLD` signals? It seems that use of the `SA_NODEFER` flag on `sigaction` might do the trick, but that flag is not accessible via `installHandler`. Dean On Mon, 8 Jul 2002, Dean Herington wrote: > I have some GHC-compiled programs that run OK under Sparc/Solaris but > hang under x86/Linux. I'm using GHC 5.02.3 on both systems (although > I've tried GHC 5.03.20020410 on Linux with the same failures). I'm > debugging to narrow the problem down. My current suspicion is that > closing the write end of a pipe is not always causing the read end to > see end-of-file. Is there any strangeness relating to this--or perhaps > with `threadWaitRead` on pipes--that anyone knows about? I sometimes > use a pipe to have two GHC threads communicate within a single process. _______________________________________________ Glasgow-haskell-bugs mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
