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.
This commit is contained in:
Ondřej Surý 2025-01-23 17:04:24 +01:00
parent 8e631afebe
commit b14df7d459
No known key found for this signature in database
GPG key ID: 2820F37E873DEA41

View file

@ -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,