]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
pullup:
authorBrian Wellington <source@isc.org>
Fri, 5 Jan 2001 22:18:28 +0000 (22:18 +0000)
committerBrian Wellington <source@isc.org>
Fri, 5 Jan 2001 22:18:28 +0000 (22:18 +0000)
 647.   [bug]           Resolver queries sent after following multiple
                        referrals had excessively long retransmission
                        timeouts due to incorrectly counting the referrals
                        as "restarts".

CHANGES
lib/dns/resolver.c

diff --git a/CHANGES b/CHANGES
index 2e221ab69a948516217f96886d272741efb3395a..09c9fb0f4f4b3273cdf0ea841ef6a7d8acff4bd0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,11 @@
                        caused the fetch to fail with a SERVFAIL result.
                        [RT #588, #597, #605, #607]
 
+ 647.  [bug]           Resolver queries sent after following multiple
+                       referrals had excessively long retransmission
+                       timeouts due to incorrectly counting the referrals
+                       as "restarts".
+
  646.  [bug]           The UnixWare ISC_PLATFORM_FIXIN6INADDR fix in isc/net.h
                        didn't _cleanly_ fix the problem it was trying to fix.
 
index f52b6ea9da28ac2dde78879663872b57ca2bd750..d4167c0fcaff2bc521fd0f1a1e07c2b21e0d24fe 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: resolver.c,v 1.187.2.1 2001/01/05 22:06:19 gson Exp $ */
+/* $Id: resolver.c,v 1.187.2.2 2001/01/05 22:18:28 bwelling Exp $ */
 
 #include <config.h>
 
@@ -174,19 +174,26 @@ struct fetchctx {
        dns_fwdpolicy_t                 fwdpolicy;
        isc_sockaddrlist_t              bad;
        ISC_LIST(dns_validator_t)       validators;
+
        /*
-        * # of events we're waiting for.
+        * The number of events we're waiting for.
         */
        unsigned int                    pending;
+
        /*
-        * # of times we have started from the beginning
-        * of the name server set.
+        * The number of times we've "restarted" the current
+        * nameserver set.  This acts as a failsafe to prevent
+        * us from pounding constantly on a particular set of
+        * servers that, for whatever reason, are not giving
+        * us useful responses, but are responding in such a
+        * way that they are not marked "bad".
         */
        unsigned int                    restarts;
+
        /*
-        * # of timeouts that have occurred since we last
-        * successfully received a response packet.  This
-        * is used for EDNS0 black hole detectino.
+        * The number of timeouts that have occurred since we 
+        * last successfully received a response packet.  This
+        * is used for EDNS0 black hole detection.
         */
        unsigned int                    timeouts;
 };
@@ -4216,6 +4223,11 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
                         */
                        get_nameservers = ISC_TRUE;
                        keep_trying = ISC_TRUE;
+                       /*
+                        * We have a new set of name servers, and it
+                        * has not experienced any restarts yet.
+                        */
+                       fctx->restarts = 0;
                        result = ISC_R_SUCCESS;
                } else if (result != ISC_R_SUCCESS) {
                        /*