On Oct 25, 2007, at 11:00 AM, Jeff Trawick wrote:
I think this is the problem: When a child is reaped normally after
exiting due to MaxSpareServers or MaxRequestsPerChild, it remains in
the scoreboard with status set to SERVER_DEAD, and it is removed from
the pid table.
Often that slot will be reused by a child created subsequently.
If it is never reused before termination or hard restart,
reclaim_child_processes() will see it in this code and complain that
it isn't in the pid table:
Yep... that appears to be it. When setting SERVER_DEAD we
aren't resetting the pid as well. Instead of working around
that, wouldn't the most straightforward approach be to
sync setting SERVER_DEAD status with also setting pid to 0?
This could be done in ap_update_child_status() which would
also hopefully address those file-based scoreboards as well.