On Fri, Mar 21, 2003 at 11:15:09AM -0500, Jeff Trawick wrote:
Aaron Bannert wrote:
The PODs in the worker MPM are getting closed and the parent is then unable to kill its children when it needs to (don't you love how morbid that sounds?). I see one of these every second in the error log:
[Thu Mar 20 18:09:25 2003] [warn] (32)Broken pipe: write pipe_of_death
lots of theories :)
what I see with HEAD is that the pipe gets file descriptor 2 (stderr), and we later make sure that the error log is file descriptor 2, resulting in one side of the pipe getting closed
Sounds like this is a different manifestation of the problem I can see. Does it work if you back down to r1.56 of filedup.c?
yes, backing off the patch I posted reintroduces the problem and then reverting filedup.c back to r1.56 "fixes" the problem
I would guess that some other changes with closing descriptors let us get fd 2 for one of the pipe handles, and that this conceivably could have happened with all sorts of code changes.
In the r1.57 filedup.c change, a cleanup is registered for the "new" fd coming out of apr_file_dup2(), which wasn't happening previously. I'm guessing that this cleanup is closing fd 2 when pconf is cleared, or
something like that.
backtracking uses of fd 2 up through this time is somewhat funny
it looks like
a) we set the error log to file descriptor 2
b) we close file descriptor 2 and set it to /dev/null via the freopen() in apr_proc_detach
c) we close file descriptor 2 (because of cleanup registered around step a??)
d) we create the pod, with file descriptor 2 as one side of the pipe
e) we again set the error log to file descriptor 2, losing that side of the pipe
