* 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 */
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));
}
}
- /*
- * 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)