![](https://seccdn.libravatar.org/avatar/77cb4da5f72bc176182dcc33f03a18f3.jpg?s=120&d=mm&r=g)
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 The Sunday 2007-12-09 at 09:49 -0500, Patrick Shanahan wrote:
Dec 9 13:43:31 nimrodel spamd[14295]: prefork: sysread(8) failed after 300 secs at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm line 642. Dec 9 13:43:31 nimrodel spamd[14296]: prefork: sysread(9) failed after 300 secs at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm line 642.
does /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm exist?
Certainly. The code is: retry_read: my $nbytes = $sock->sysread($buf, $toread); if (!defined $nbytes) { unless ((exists &Errno::EAGAIN && $! == &Errno::EAGAIN) || (exists &Errno::EWOULDBLOCK && $! == &Errno::EWOULDBLOCK)) { # an error that wasn't non-blocking I/O-related. that's serious return undef; } # ok, we didn't get it first time. we'll have to start using # select() and timeouts (which is slower). Don't warn just yet, # as it's quite acceptable in our design to have to "block" on # sysread()s here. my $now = time(); my $tout = $timeout; if (!defined $deadline) { # set this. it'll be close enough ;) $deadline = $now + $timeout; } elsif ($now > $deadline) { # timed out! report failure warn "prefork: sysread(".$sock->fileno.") failed after $timeout secs"; <==== return undef; } But I don't know perl, and even less spamassassin code.
try adding "-L" for a time to see if network lookups are timing out.
To where do I add that? :-O
Could be dns or ipv6 problem???
I have absolutely no idea... Another clue is that spamassassin is slower since some days ago, and uses much less CPU. It appears to stop waiting for some thing. Couldbe related to the above code. And I keep seeing errors in the warn log: Dec 9 16:34:45 nimrodel spamd[16817]: Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm line 323. Dec 9 16:34:45 nimrodel spamd[22472]: prefork: sysread(9) failed after 300 secs at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm line 642. Dec 9 16:34:45 nimrodel spamd[22473]: prefork: sysread(9) failed after 300 secs at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm line 642. Dec 9 16:34:45 nimrodel spamd[16817]: prefork: select returned error on server filehandle: Dec 9 16:34:45 nimrodel spamd[22472]: prefork: sysread(9) failed after 300 secs at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm line 642. Dec 9 16:34:45 nimrodel spamd[22473]: prefork: sysread(9) failed after 300 secs at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm line 642. Dec 9 16:34:45 nimrodel spamd[16817]: prefork: select returned error on server filehandle: Dec 9 16:37:13 nimrodel spamd[16817]: Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm line 323. Dec 9 16:37:13 nimrodel spamd[16817]: prefork: select returned error on server filehandle: Dec 9 16:37:13 nimrodel spamd[16817]: prefork: select returned error on server filehandle: Dec 9 16:39:19 nimrodel spamd[16817]: Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/SpamdForkScaling.pm line 323. Dec 9 16:39:19 nimrodel spamd[16817]: prefork: select returned error on server filehandle: Dec 9 16:39:19 nimrodel spamd[16817]: prefork: select returned error on server filehandle: That uninitialized value refers to this code: # errors; handle undef *or* -1 returned. do this before "errors on # the handle" below, since an error condition is signalled both via # a -1 return and a $eout bit. if (!defined $nfound || $nfound < 0) { if (exists &Errno::EINTR && $selerr == &Errno::EINTR) { # this happens if the process is signalled during the select(), # for example if someone sends SIGHUP to reload the configuration. # just return inmmediately dbg("prefork: select returned err $selerr, probably signalled"); return; } # if a child exits during that select() call, it generates a spurious # error, like this: # # Jan 29 12:53:17 dogma spamd[18518]: prefork: child states: BI # Jan 29 12:53:17 dogma spamd[18518]: spamd: handled cleanup of child pid 13101 due to SIGCHLD # Jan 29 12:53:17 dogma spamd[18518]: prefork: select returned -1! recovering: # # avoid by setting a boolean in the child_exited() callback and checking # it here. log $! just in case, though. if ($self->{child_just_exited} && $nfound == -1) { dbg("prefork: select returned -1 due to child exiting, ignored ($selerr)"); return; } warn "prefork: select returned ". (defined $nfound ? $nfound : "undef"). "! recovering: $selerr\n"; sleep 1; # avoid overload return; } # errors on the handle? # return them immediately, they may be from a SIGHUP restart signal if ($self->vec_all(\$eout, $self->{server_fileno})) { warn "prefork: select returned error on server filehandle: $selerr $!\n"; <==== return; } But I have no idea what is all about. - -- Cheers, Carlos E. R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4-svn0 (GNU/Linux) iD8DBQFHXBC+tTMYHG2NR9URAtlJAKCAczDvNOPQD/J6yD2wsOw4HaJOLgCdHDsa EiB92JhG174m/NL1Zo8ctsQ= =E0FX -----END PGP SIGNATURE----- -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org For additional commands, e-mail: opensuse+help@opensuse.org