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 2018/10/05 17:28:23 UTC
svn commit: r1842948 - /spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm
Author: hege
Date: Fri Oct 5 17:28:23 2018
New Revision: 1842948
URL: http://svn.apache.org/viewvc?rev=1842948&view=rev
Log:
Optimize is_dns_available()
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm?rev=1842948&r1=1842947&r2=1842948&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm Fri Oct 5 17:28:23 2018
@@ -37,7 +37,7 @@ use POSIX ":sys_wait_h";
our $KNOWN_BAD_DIALUP_RANGES; # Nothing uses this var???
-our $LAST_DNS_CHECK;
+our $LAST_DNS_CHECK = 0;
# use very well-connected domains (fast DNS response, many DNS servers,
# geographical distribution is a plus, TTL of at least 3600s)
@@ -516,22 +516,27 @@ sub lookup_ns {
sub is_dns_available {
my ($self) = @_;
my $dnsopt = $self->{conf}->{dns_available};
- my $dnsint = $self->{conf}->{dns_test_interval} || 600;
- my @domains;
- $LAST_DNS_CHECK ||= 0;
- my $diff = time() - $LAST_DNS_CHECK;
+ # Fast response for the most common cases
+ return 1 if $IS_DNS_AVAILABLE && $dnsopt eq "yes";
+ return 0 if defined $IS_DNS_AVAILABLE && $dnsopt eq "no";
# undef $IS_DNS_AVAILABLE if we should be testing for
# working DNS and our check interval time has passed
- if ($dnsopt eq "test" && $diff > $dnsint) {
- $IS_DNS_AVAILABLE = undef;
- dbg("dns: is_dns_available() last checked %.1f seconds ago; re-checking",
- $diff);
+ if ($dnsopt eq "test") {
+ my $diff = time - $LAST_DNS_CHECK;
+ if ($diff > ($self->{conf}->{dns_test_interval}||600)) {
+ $IS_DNS_AVAILABLE = undef;
+ if ($LAST_DNS_CHECK) {
+ dbg("dns: is_dns_available() last checked %.1f seconds ago; re-checking", $diff);
+ } else {
+ dbg("dns: is_dns_available() initial check");
+ }
+ }
+ $LAST_DNS_CHECK = time;
}
- return $IS_DNS_AVAILABLE if (defined $IS_DNS_AVAILABLE);
- $LAST_DNS_CHECK = time();
+ return $IS_DNS_AVAILABLE if defined $IS_DNS_AVAILABLE;
$IS_DNS_AVAILABLE = 0;
if ($dnsopt eq "no") {
@@ -575,6 +580,7 @@ sub is_dns_available {
return $IS_DNS_AVAILABLE;
}
+ my @domains;
if ($dnsopt =~ /^test:\s*(\S.*)$/) {
@domains = split (/\s+/, $1);
dbg("dns: looking up NS records for user specified domains: %s",