From 60e25826c6b1b36847b40c30cf3afa89e32b2402 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Thu, 5 May 2022 14:57:16 -0700 Subject: [PATCH] Cleanup: always count ns_statscounter_recursclients The ns_statscounter_recursclients counter was previously only incremented or decremented if client->recursionquota was non-NULL. This was harmless, because that value should always be non-NULL if recursion is enabled, but it made the code slightly confusing. (cherry picked from commit 0201eab655983985358443a3e9d44ca848c60c18) --- lib/ns/query.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/ns/query.c b/lib/ns/query.c index 8362f56a2b..eb2b44b70c 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -2530,10 +2530,11 @@ prefetch_done(isc_task_t *task, isc_event_t *event) { */ if (client->recursionquota != NULL) { isc_quota_detach(&client->recursionquota); - ns_stats_decrement(client->sctx->nsstats, - ns_statscounter_recursclients); } + ns_stats_decrement(client->sctx->nsstats, + ns_statscounter_recursclients); + free_devent(client, &event, &devent); isc_nmhandle_detach(&client->prefetchhandle); } @@ -2561,8 +2562,6 @@ query_prefetch(ns_client_t *client, dns_name_t *qname, &client->recursionquota); switch (result) { case ISC_R_SUCCESS: - ns_stats_increment(client->sctx->nsstats, - ns_statscounter_recursclients); break; case ISC_R_SOFTQUOTA: isc_quota_detach(&client->recursionquota); @@ -2572,6 +2571,9 @@ query_prefetch(ns_client_t *client, dns_name_t *qname, } } + ns_stats_increment(client->sctx->nsstats, + ns_statscounter_recursclients); + tmprdataset = ns_client_newrdataset(client); if (tmprdataset == NULL) { return; @@ -2778,8 +2780,6 @@ query_rpzfetch(ns_client_t *client, dns_name_t *qname, dns_rdatatype_t type) { &client->recursionquota); switch (result) { case ISC_R_SUCCESS: - ns_stats_increment(client->sctx->nsstats, - ns_statscounter_recursclients); break; case ISC_R_SOFTQUOTA: isc_quota_detach(&client->recursionquota); @@ -2789,6 +2789,9 @@ query_rpzfetch(ns_client_t *client, dns_name_t *qname, dns_rdatatype_t type) { } } + ns_stats_increment(client->sctx->nsstats, + ns_statscounter_recursclients); + tmprdataset = ns_client_newrdataset(client); if (tmprdataset == NULL) { return; @@ -6249,10 +6252,11 @@ fetch_callback(isc_task_t *task, isc_event_t *event) { if (client->recursionquota != NULL) { isc_quota_detach(&client->recursionquota); - ns_stats_decrement(client->sctx->nsstats, - ns_statscounter_recursclients); } + ns_stats_decrement(client->sctx->nsstats, + ns_statscounter_recursclients); + LOCK(&client->manager->reclock); if (ISC_LINK_LINKED(client, rlink)) { ISC_LIST_UNLINK(client->manager->recursing, client, rlink); @@ -6386,11 +6390,6 @@ check_recursionquota(ns_client_t *client) { if (client->recursionquota == NULL) { result = isc_quota_attach(&client->sctx->recursionquota, &client->recursionquota); - if (result == ISC_R_SUCCESS || result == ISC_R_SOFTQUOTA) { - ns_stats_increment(client->sctx->nsstats, - ns_statscounter_recursclients); - } - if (result == ISC_R_SOFTQUOTA) { isc_stdtime_t now; isc_stdtime_get(&now); @@ -6473,6 +6472,9 @@ ns_query_recurse(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qname, return (result); } + ns_stats_increment(client->sctx->nsstats, + ns_statscounter_recursclients); + /* * Invoke the resolver. */ @@ -6763,10 +6765,11 @@ query_hookresume(isc_task_t *task, isc_event_t *event) { if (client->recursionquota != NULL) { isc_quota_detach(&client->recursionquota); - ns_stats_decrement(client->sctx->nsstats, - ns_statscounter_recursclients); } + ns_stats_decrement(client->sctx->nsstats, + ns_statscounter_recursclients); + LOCK(&client->manager->reclock); if (ISC_LINK_LINKED(client, rlink)) { ISC_LIST_UNLINK(client->manager->recursing, client, rlink); @@ -6902,6 +6905,9 @@ ns_query_hookasync(query_ctx_t *qctx, ns_query_starthookasync_t runasync, goto cleanup; } + ns_stats_increment(client->sctx->nsstats, + ns_statscounter_recursclients); + saved_qctx = isc_mem_get(client->mctx, sizeof(*saved_qctx)); qctx_save(qctx, saved_qctx); result = runasync(saved_qctx, client->mctx, arg, client->task,