Currently, the fetch context will continue running even when the last
fetch (response) has been removed from the context, so named can process
and cache the answer. This can lead to a situation where the number of
outgoing recursing clients exceeds the the configured number for
recursive-clients.
Be more stringent about the recursive-clients limit and shutdown the
fetch context immediately after the last fetch has been canceled from
that particular fetch context.
isc_task_sendanddetach(&etask, ISC_EVENT_PTR(&event_fetchdone));
}
- /*
- * The fctx continues running even if no fetches remain;
- * the answer is still cached.
- */
+ if (ISC_LIST_EMPTY(fctx->events)) {
+ fctx_shutdown(fctx);
+ }
UNLOCK(&res->buckets[fctx->bucketnum].lock);
}