You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2006/10/16 15:28:26 UTC
svn commit: r464484 -
/spamassassin/trunk/lib/Mail/SpamAssassin/SpamdForkScaling.pm
Author: jm
Date: Mon Oct 16 06:28:25 2006
New Revision: 464484
URL: http://svn.apache.org/viewvc?view=rev&rev=464484
Log:
bug 4594: add possible workaround for the rare 'ordered child to accept, but they reported state '1'' bug; unclear if this works
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/SpamdForkScaling.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/SpamdForkScaling.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/SpamdForkScaling.pm?view=diff&rev=464484&r1=464483&r2=464484
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/SpamdForkScaling.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/SpamdForkScaling.pm Mon Oct 16 06:28:25 2006
@@ -426,7 +426,13 @@
dbg("prefork: ordered $kid to accept");
# now wait for it to say it's done that
- return $self->wait_for_child_to_accept($sock);
+ my $ret = $self->wait_for_child_to_accept($kid, $sock);
+ if ($ret) {
+ return $ret;
+ } else {
+ # retry with another child
+ return $self->order_idle_child_to_accept();
+ }
}
else {
@@ -436,10 +442,11 @@
}
sub wait_for_child_to_accept {
- my ($self, $sock) = @_;
+ my ($self, $kid, $sock) = @_;
while (1) {
my $state = $self->read_one_message_from_child_socket($sock);
+
if ($state == PFSTATE_BUSY) {
return 1; # 1 == success
}
@@ -447,7 +454,12 @@
return undef;
}
else {
- die "prefork: ordered child to accept, but child reported state '$state'";
+ warn "prefork: ordered child $kid to accept, but they reported state '$state', killing rogue";
+ $self->child_error_kill($kid, $sock);
+ $self->adapt_num_children();
+ sleep 1;
+
+ return undef;
}
}
}