*/
if (client->recursionquota != NULL) {
isc_quota_detach(&client->recursionquota);
- ns_stats_decrement(client->sctx->nsstats,
- ns_statscounter_recursclients);
+ if (client->query.prefetch == NULL) {
+ ns_stats_decrement(client->sctx->nsstats,
+ ns_statscounter_recursclients);
+ }
}
/*
}
UNLOCK(&client->query.fetchlock);
+ /*
+ * We're done prefetching, detach from quota.
+ */
+ if (client->recursionquota != NULL) {
+ isc_quota_detach(&client->recursionquota);
+ }
+
free_devent(client, &event, &devent);
isc_nmhandle_unref(client->handle);
}
if (client->recursionquota == NULL) {
result = isc_quota_attach(&client->sctx->recursionquota,
&client->recursionquota);
+ if (result == ISC_R_SOFTQUOTA) {
+ isc_quota_detach(&client->recursionquota);
+ }
if (result != ISC_R_SUCCESS) {
return;
}
if (client->recursionquota == NULL) {
result = isc_quota_attach(&client->sctx->recursionquota,
&client->recursionquota);
+ if (result == ISC_R_SOFTQUOTA) {
+ isc_quota_detach(&client->recursionquota);
+ }
if (result != ISC_R_SUCCESS) {
return;
}