You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by he...@apache.org on 2022/04/12 08:39:25 UTC
svn commit: r1899770 - /spamassassin/trunk/spamd/spamd.raw
Author: hege
Date: Tue Apr 12 08:39:24 2022
New Revision: 1899770
URL: http://svn.apache.org/viewvc?rev=1899770&view=rev
Log:
Improve accept error handling
Modified:
spamassassin/trunk/spamd/spamd.raw
Modified: spamassassin/trunk/spamd/spamd.raw
URL: http://svn.apache.org/viewvc/spamassassin/trunk/spamd/spamd.raw?rev=1899770&r1=1899769&r2=1899770&view=diff
==============================================================================
--- spamassassin/trunk/spamd/spamd.raw (original)
+++ spamassassin/trunk/spamd/spamd.raw Tue Apr 12 08:39:24 2022
@@ -1425,12 +1425,12 @@ sub spawn {
my $evalret = eval { accept_a_conn($scaling ? 0.5 : undef); };
if (!defined $evalret) {
- warn("spamd: error: $@ $!, continuing");
+ warn("spamd: error: $@, continuing\n");
if ($client) { $client->close(); } # avoid fd leaks
}
elsif ($evalret == -1) {
# serious error; used for accept() failure
- die("spamd: respawning server");
+ die("spamd: respawning server\n");
}
$spamtest->call_plugins("spamd_child_post_connection_close");
@@ -1550,18 +1550,21 @@ sub accept_from_any_server_socket {
$socket or die "no socket???, impossible";
dbg("spamd: accept() on fd %d", $selected_socket_info->{fd});
$client = $socket->accept;
+ if (!defined $client) {
+ if (defined $socket) {
+ die sprintf("%s accept failed: %s\n", ref $socket,
+ $socket->isa('IO::Socket::SSL') ?
+ $socket->errstr : $@);
+ } else {
+ die "accept failed: no socket available: $!\n";
+ }
+ }
}
1; # end eval with success
} or do {
my $err = $@ ne '' ? $@ : "errno=$!"; chomp $err;
- if ($locked) {
- dbg("spamd: releasing a lock over select+accept");
- flock($sockets_access_lock_fh, LOCK_UN)
- or die "Can't release sockets-access lock: $!";
- $locked = 0;
- }
- die "accept_a_conn: $err";
+ info("spamd: accept_a_conn: $err");
};
if ($locked) {
@@ -1569,16 +1572,7 @@ sub accept_from_any_server_socket {
flock($sockets_access_lock_fh, LOCK_UN)
or die "Can't release sockets-access lock: $!";
}
- if(!defined $client) {
- if(defined($socket)) {
- die sprintf("accept_a_conn: %s accept failed: %s",
- ref $socket,
- !$socket->isa('IO::Socket::SSL') ? $!
- : $socket->errstr.", $!");
- } else {
- die sprintf("accept_a_conn: no socket available");
- }
- }
+
return ($client, $selected_socket_info);
}
@@ -1601,8 +1595,11 @@ sub accept_a_conn {
if ( $! == &Errno::EINTR ) {
return 0;
}
+ elsif ( $@ =~ /ssl3_get_record:wrong version number/ ) {
+ # Handshake error, not speaking SSL? No need to respawn
+ return 0;
+ }
else {
- warn("spamd: accept failed: $!");
return -1;
}
}