You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by gb...@apache.org on 2022/04/19 06:45:27 UTC
svn commit: r1900016 - /spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
Author: gbechis
Date: Tue Apr 19 06:45:27 2022
New Revision: 1900016
URL: http://svn.apache.org/viewvc?rev=1900016&view=rev
Log:
if a restartable signal is caught, retry select(2) 3 times before aborting
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm?rev=1900016&r1=1900015&r2=1900016&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm Tue Apr 19 06:45:27 2022
@@ -786,7 +786,9 @@ sub poll_responses {
for (;;) {
my ($nfound, $timeleft, $eval_stat);
- eval { # use eval to catch alarm signal
+ # if a restartable signal is caught, retry 3 times before aborting
+ my $eintrcount = 3;
+ eval { # use eval to caught alarm signal
my $timer; # collects timestamp when variable goes out of scope
if (!defined($timeout) || $timeout > 0)
{ $timer = $self->{main}->time_method("poll_dns_idle") }
@@ -802,6 +804,10 @@ sub poll_responses {
warn "dns: select aborted: $eval_stat\n";
last;
} elsif (!defined $nfound || $nfound < 0) {
+ if ($!{EINTR} and $eintrcount > 0) {
+ $eintrcount--;
+ next;
+ }
if ($!) { warn "dns: select failed: $!\n" }
else { info("dns: select interrupted") } # shouldn't happen
last;