From: Daniel Kahn Gillmor Date: Wed, 27 Oct 2010 05:03:46 +0000 (-0400) Subject: do not explicitly wait on the pid in question; just reap the zombies on SIGCHLD X-Git-Tag: msva-perl_debian/0.6-1~3^2~16 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=947bca3a026dabe60781df1c30a8af54a0c76679;p=monkeysphere-validation-agent.git do not explicitly wait on the pid in question; just reap the zombies on SIGCHLD --- diff --git a/Crypt/Monkeysphere/MSVA.pm b/Crypt/Monkeysphere/MSVA.pm index ee71236..72061ab 100755 --- a/Crypt/Monkeysphere/MSVA.pm +++ b/Crypt/Monkeysphere/MSVA.pm @@ -610,16 +610,6 @@ my $server = shift; $self->spawn_master_subproc($server); - if (exists $self->{child_pid} && - $self->{child_pid} != 0) { - my $val; - while (defined($val = POSIX::waitpid(-1, POSIX::WNOHANG)) && $val > 0) { - msvalog('debug', "waitpid on %d: got %d\n", $self->{child_pid}, $val); - if ($val == $self->{child_pid}) { - $self->master_subprocess_died($server, $?); - } - } - } } sub master_subprocess_died { @@ -716,7 +706,12 @@ } elsif ($#ARGV >= 0) { $self->{child_pid} = 0; # indicate that we are planning to fork. # avoid ignoring SIGCHLD right before we fork. - $SIG{CHLD} = 'DEFAULT'; + $SIG{CHLD} = sub { + my $val; + while (defined($val = POSIX::waitpid(-1, POSIX::WNOHANG)) && $val > 0) { + $self->child_dies($val, $server); + } + }; my $fork = fork(); if (! defined $fork) { msvalog('error', "could not fork\n");