From 1be3bd3c8f3dafcd41d07cf5d4e8730c01de1e82 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 27 Jan 2011 02:29:47 +0000 Subject: [PATCH] 3009. [bug] clients-per-query code didn't work as expected with particular query patterns. [RT #22972] --- CHANGES | 2 ++ lib/dns/resolver.c | 21 +++++++++------------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/CHANGES b/CHANGES index 35406fc82f..96a85f5e44 100644 --- 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.6.3rc1 released --- diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 84f3ed31ad..c49df611ba 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: resolver.c,v 1.384.14.28 2010/06/23 23:46:05 tbox Exp $ */ +/* $Id: resolver.c,v 1.384.14.29 2011/01/27 02:29:47 marka Exp $ */ /*! \file */ @@ -7443,6 +7443,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)); @@ -7577,17 +7584,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)