3009. [bug] clients-per-query code didn't work as expected with

particular query patterns. [RT #22972]
This commit is contained in:
Mark Andrews
2011-01-27 02:29:47 +00:00
parent d11e8b7bd5
commit 1be3bd3c8f
2 changed files with 11 additions and 12 deletions

View File

@@ -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 ---

View File

@@ -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)