[PATCH] Handle SIGCHLD better in process_standard, remove process_{onefork,prefork}

Jeremy Allison jra at samba.org
Mon Mar 2 17:58:03 MST 2015


On Tue, Mar 03, 2015 at 01:05:20PM +1300, Andrew Bartlett wrote:
> 
> The difference is that this code knows what the PID is for waitpid(),
> rather than using a PID of -1: 	while ((pid = sys_waitpid(-1, &status,
> WNOHANG)) > 0) {
> 		bool unclean_shutdown = False;
> 
> The issue with waitpid() of -1, as I understand it, is that no other
> waitpid (expecting a specific pid) can be called in that codebase,
> because this one will preempt the more specific call, say in
> samba_runcmd_recv(). 

The advantage to using waitpid(-1...WNOHANG) in this
case is it also reaps zombies that we might not have
been expecting.

Now we should always know about our children, and
catch them when they terminate - but in the long and
glorious history of Samba there might have been
occassions where we weren't so dilligent, and leaked
zombies like a bad episode of "The Walking Dead".

Current code stops that from happening again, should
(god forbid :-) we make another mistake :-).


More information about the samba-technical mailing list