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;