]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3009. [bug] clients-per-query code didn't work as expected with
authorMark Andrews <marka@isc.org>
Thu, 27 Jan 2011 02:24:49 +0000 (02:24 +0000)
committerMark Andrews <marka@isc.org>
Thu, 27 Jan 2011 02:24:49 +0000 (02:24 +0000)
                        particular query patterns. [RT #22972]

CHANGES
lib/dns/resolver.c

diff --git a/CHANGES b/CHANGES
index 94ccd4bb9a5feec8211213f29e17cf08acd2d629..8e815b0f3d60cb8a071a3e375a3beb454ef6c979 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+3009.  [bug]           clients-per-query code didn't work as expected with
+                       particular query patterns. [RT #22972]
 
        --- 9.8.0b1 released ---
 
index fd4640eb80317df3aee92b6c64b587cc6f36d2d5..b6e8764684968964d71426b8298257d866c98f50 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: resolver.c,v 1.426 2010/09/15 12:21:27 marka Exp $ */
+/* $Id: resolver.c,v 1.427 2011/01/27 02:24:49 marka Exp $ */
 
 /*! \file */
 
@@ -7824,6 +7824,13 @@ static inline isc_boolean_t
 fctx_match(fetchctx_t *fctx, dns_name_t *name, dns_rdatatype_t type,
           unsigned int options)
 {
+       /*
+        * Don't match fetch contexts that are shutting down.
+        */
+       if (fctx->cloned || fctx->state == fetchstate_done ||
+           ISC_LIST_EMPTY(fctx->events))
+               return (ISC_FALSE);
+
        if (fctx->type != type || fctx->options != options)
                return (ISC_FALSE);
        return (dns_name_equal(&fctx->name, name));
@@ -7958,17 +7965,7 @@ dns_resolver_createfetch2(dns_resolver_t *res, dns_name_t *name,
                }
        }
 
-       /*
-        * If we didn't have a fetch, would attach to a done fetch, this
-        * fetch has already cloned its results, or if the fetch has gone
-        * "idle" (no one was interested in it), we need to start a new
-        * fetch instead of joining with the existing one.
-        */
-       if (fctx == NULL ||
-           fctx->state == fetchstate_done ||
-           fctx->cloned ||
-           ISC_LIST_EMPTY(fctx->events)) {
-               fctx = NULL;
+       if (fctx == NULL) {
                result = fctx_create(res, name, type, domain, nameservers,
                                     options, bucketnum, &fctx);
                if (result != ISC_R_SUCCESS)