I've seen a couple of problems over the last few weeks with master 
apparently failing to correctly maintain the prefork pool. We 
particularly see this problem with pop3d, which has more 
connects/disconnects than IMAP because of the nature of the protocol.

The first issue is that in shut_down() sockets are not closed. It seems 
that this can leave sockets in CLOSE_WAIT state in certain error 
situations where popd_reset() is not called.

The second issue is that we sometimes see sockets remain in a CLOSE_WAIT 
state because there is still data to be read. It appears that 
prot_fill() should be called in popd_reset() and shut_down().

The third issue is that when a process fails to shutdown correctly, such 
as if it segfaults, master does not seem to correctly keep track of the 
child process count. As a result, eventually the pool runs out and no 
more connections are accepted.

Do the resolutions to the first two issues sound correct (we have made 
these changes and it seems to have fixed things for us)? Does anyone 
have a fix for the third issue?


Reply via email to