From b14df7d459e7d0950d15adf9741fb06b751cf113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Thu, 23 Jan 2025 17:04:24 +0100 Subject: [PATCH] Stop the timer when shuttingdown the fetch context When canceling the last fetch, we also need to stop the fctx_expired timer from possibly firing between the fctx_shutdown() call and the fetch being actually destroyed along with the timer. As there are multiple places where fctx_shutdown() is being called without stopping the timer, move the fctx_stoptimer() to fctx_shutdown() and cleanup the explicit usage. --- lib/dns/resolver.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 2178a17b5e..145dfeff15 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -1981,7 +1981,6 @@ fctx__done_detach(fetchctx_t **fctxp, isc_result_t result, const char *file, fctx->qmin_warning = ISC_R_SUCCESS; fctx_cancelqueries(fctx, no_response, age_untried); - fctx_stoptimer(fctx); LOCK(&res->buckets[fctx->bucketnum].lock); FCTX_ATTR_CLR(fctx, FCTX_ATTR_ADDRWAIT); @@ -4688,6 +4687,8 @@ fctx_shutdown(fetchctx_t *fctx) { * exit. */ if (fctx->state != fetchstate_init) { + fctx_stoptimer(fctx); + FCTXTRACE("posting control event"); cevent = &fctx->control_event; isc_task_sendto(fctx->res->buckets[fctx->bucketnum].task,