On Fri, 29 May 2009, Jared Johnson wrote:

 What's orphaned is not a child process, but a shared mem hash record for a
 process which no longer exists. I suspect that code is racy.

Hrm, then if we're getting a whole lot of these, does this mean child processes are going away at a high rate?

Perhaps. Would need further analysis.

I think we already established a little while ago that lifetime of pre-forked child processes is cut short by any plugin which does a disconnect. That would lead to premature child death, but wouldn't by itself be a race.

What I suspect is that there is a backlog of sigchild processing while the shared mem is locked (or perhaps missed sigchild). I haven't looked in great detail at the code, but I think the race would be removed by the child itself removing its entry in the shared mem hash. A dying child would be blocked waiting for the lock until the parent had finished its !kill(0, $pid) loop.

I wouldn't expect such a condition using prefork with relatively low concurrency, maybe this reflects a problem during the end of the connection..

-Jared

Inbound and outbound email scanned for spam and viruses by the
DoubleCheck Email Manager v5: http://www.doublecheckemail.com

Do we have to be exposed to this spam?

Reply via email to