]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1679. [bug] When there was a single nameserver with multiple
authorMark Andrews <marka@isc.org>
Fri, 25 Jun 2004 04:44:57 +0000 (04:44 +0000)
committerMark Andrews <marka@isc.org>
Fri, 25 Jun 2004 04:44:57 +0000 (04:44 +0000)
                        addresses for a zone not all addresses were tried.
                        [RT #11706]

CHANGES
lib/dns/resolver.c

diff --git a/CHANGES b/CHANGES
index 1cf842776f4cd86e4cd867cf74858f0b60135f94..061df636fd7df5677b3b7d1c33143047cc925a61 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+1679.  [bug]           When there was a single nameserver with multiple
+                       addresses for a zone not all addresses were tried.
+                       [RT #11706]
+
 1672.  [cleanup]       Tests which only function in a threaded build
                        now return R:THREADONLY (rather than R:UNTESTED)
                        in a non-threaded build.
index 27588c2709e322b7530344e96a527843c86c7759..39eebe1df896e857b7a8feb5ce3332b19221541d 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: resolver.c,v 1.218.2.31 2004/04/15 02:16:27 marka Exp $ */
+/* $Id: resolver.c,v 1.218.2.32 2004/06/25 04:44:57 marka Exp $ */
 
 #include <config.h>
 
@@ -1812,21 +1812,23 @@ fctx_nextaddress(fetchctx_t *fctx) {
         * Find the first unmarked addrinfo.
         */
        addrinfo = NULL;
-       while (find != fctx->find) {
-               for (addrinfo = ISC_LIST_HEAD(find->list);
-                    addrinfo != NULL;
-                    addrinfo = ISC_LIST_NEXT(addrinfo, publink)) {
-                       possibly_mark(fctx, addrinfo);
-                       if (UNMARKED(addrinfo)) {
-                               addrinfo->flags |= FCTX_ADDRINFO_MARK;
-                               break;
+       if (find != NULL) {
+               do {
+                       for (addrinfo = ISC_LIST_HEAD(find->list);
+                            addrinfo != NULL;
+                            addrinfo = ISC_LIST_NEXT(addrinfo, publink)) {
+                               possibly_mark(fctx, addrinfo);
+                               if (UNMARKED(addrinfo)) {
+                                       addrinfo->flags |= FCTX_ADDRINFO_MARK;
+                                       break;
+                               }
                        }
-               }
-               if (addrinfo != NULL)
-                       break;
-               find = ISC_LIST_NEXT(find, publink);
-               if (find != fctx->find && find == NULL)
-                       find = ISC_LIST_HEAD(fctx->finds);
+                       if (addrinfo != NULL)
+                               break;
+                       find = ISC_LIST_NEXT(find, publink);
+                       if (find != fctx->find && find == NULL)
+                               find = ISC_LIST_HEAD(fctx->finds);
+               } while (find != fctx->find);
        }
 
        fctx->find = find;