From: Ondřej Surý Date: Tue, 14 Jun 2022 11:13:32 +0000 (+0200) Subject: Add recursionquota_detach() X-Git-Tag: v9.19.3~50^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=70254724e7486cacca0d5b2116bc52503c58e51a;p=thirdparty%2Fbind9.git Add recursionquota_detach() Add a new helper function for detaching from the recursion quota in order to reduce code duplication and to ensure that detaching from that quota is always accompanied by decreasing the recursive clients counter. --- diff --git a/lib/ns/query.c b/lib/ns/query.c index 18c6a820e19..81e07cb46ea 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -2477,6 +2477,16 @@ free_devent(ns_client_t *client, isc_event_t **eventp, isc_event_free(eventp); } +static void +recursionquota_detach(ns_client_t *client) { + if (client->recursionquota != NULL) { + isc_quota_detach(&client->recursionquota); + } + + ns_stats_decrement(client->manager->sctx->nsstats, + ns_statscounter_recursclients); +} + static void prefetch_done(isc_task_t *task, isc_event_t *event) { dns_fetchevent_t *devent = (dns_fetchevent_t *)event; @@ -2501,12 +2511,7 @@ prefetch_done(isc_task_t *task, isc_event_t *event) { /* * We're done prefetching, detach from quota. */ - if (client->recursionquota != NULL) { - isc_quota_detach(&client->recursionquota); - } - - ns_stats_decrement(client->manager->sctx->nsstats, - ns_statscounter_recursclients); + recursionquota_detach(client); free_devent(client, &event, &devent); isc_nmhandle_detach(&client->prefetchhandle); @@ -6181,12 +6186,7 @@ fetch_callback(isc_task_t *task, isc_event_t *event) { * the manager's recursing-clients list. */ - if (client->recursionquota != NULL) { - isc_quota_detach(&client->recursionquota); - } - - ns_stats_decrement(client->manager->sctx->nsstats, - ns_statscounter_recursclients); + recursionquota_detach(client); LOCK(&client->manager->reclock); if (ISC_LINK_LINKED(client, rlink)) { @@ -6674,12 +6674,7 @@ query_hookresume(isc_task_t *task, isc_event_t *event) { UNLOCK(&client->query.fetchlock); SAVE(hctx, rev->ctx); - if (client->recursionquota != NULL) { - isc_quota_detach(&client->recursionquota); - } - - ns_stats_decrement(client->manager->sctx->nsstats, - ns_statscounter_recursclients); + recursionquota_detach(client); LOCK(&client->manager->reclock); if (ISC_LINK_LINKED(client, rlink)) {