Date: Mon, 06 Nov 2006 09:15:40 -0600 From: Larry Rosenman <ler@lerctr.org> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/105213: mail/p5-Mail-SpamAssassin: Dies occasionally: prefork: ordered... Message-ID: <E1Gh6CK-0005HX-Ua@thebighonker.lerctr.org> Resent-Message-ID: <200611061520.kA6FKScU041551@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 105213 >Category: ports >Synopsis: mail/p5-Mail-SpamAssassin: Dies occasionally: prefork: ordered... >Confidential: no >Severity: non-critical >Priority: high >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Nov 06 15:20:27 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Larry Rosenman >Release: FreeBSD 6.2-PRERELEASE amd64 >Organization: LERCTR Consulting >Environment: System: FreeBSD thebighonker.lerctr.org 6.2-PRERELEASE FreeBSD 6.2-PRERELEASE #80: Sat Nov 4 20:57:14 CST 2006 root@thebighonker.lerctr.org:/usr/obj/usr/src/sys/THEBIGHONKER amd64 >Description: spamd will occasionally die with "prefork: ordered child to accept, but child reported state '1'. The SA guys have a bug opened (4594), and it's been going on for a while. They have a patch, which seems to fix it at: http://issues.apache.org/SpamAssassin/attachment.cgi?id=3713&action=view (I've added the patch below, but the link is better if the MTA's mangle it). Can we get this patch into the port? >How-To-Repeat: It's very spotty. I can go weeks without seeing it, then see tons of it in a short time. >Fix: Index: lib/Mail/SpamAssassin/SpamdForkScaling.pm =================================================================== --- lib/Mail/SpamAssassin/SpamdForkScaling.pm (revision 462907) +++ lib/Mail/SpamAssassin/SpamdForkScaling.pm (working copy) @@ -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; } } } @@ -479,6 +491,8 @@ sub update_child_status_busy { my ($self) = @_; + +# if (rand 4 < 1) { $self->report_backchannel_socket("I".pack("N",$self->{pid})."\n");return; warn "TEST for bug 4594"; die; } # "B b1 b2 b3 b4 \n " $self->report_backchannel_socket("B".pack("N",$self->{pid})."\n"); } >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1Gh6CK-0005HX-Ua>