bind/backport-0029-isc_ratelimiter-needs-to-hold-a-reference-to-its-tas.patch
jiangheng ad37c37958 backport some patches from community
(cherry picked from commit a9fd9ece9b9436b6103d084920c6897ef1adbae6)
2022-09-03 21:36:21 +08:00

46 lines
1.3 KiB
Diff

From a7da8f84caabb975ac0e21ca3c0816bca81413e5 Mon Sep 17 00:00:00 2001
From: Mark Andrews <marka@isc.org>
Date: Wed, 19 Aug 2020 18:45:38 +1000
Subject: [PATCH] isc_ratelimiter needs to hold a reference to its task
to prevent the task subsystem shutting down before the
ratelimiter is freed.
(cherry picked from commit b8e4b6d30325168bee19e1f05e286c5d3592c4ff)
Conflict: NA
Reference: https://gitlab.isc.org/isc-projects/bind9/-/commit/a7da8f84caabb975ac0e21ca3c0816bca81413e5
---
lib/isc/ratelimiter.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/lib/isc/ratelimiter.c b/lib/isc/ratelimiter.c
index 3fd211f633..1fefe9b25a 100644
--- a/lib/isc/ratelimiter.c
+++ b/lib/isc/ratelimiter.c
@@ -252,11 +252,14 @@ isc_ratelimiter_shutdown(isc_ratelimiter_t *rl) {
(void)isc_timer_reset(rl->timer, isc_timertype_inactive,
NULL, NULL, false);
while ((ev = ISC_LIST_HEAD(rl->pending)) != NULL) {
+ task = ev->ev_sender;
ISC_LIST_UNLINK(rl->pending, ev, ev_ratelink);
ev->ev_attributes |= ISC_EVENTATTR_CANCELED;
task = ev->ev_sender;
isc_task_send(task, &ev);
}
+ task = NULL;
+ isc_task_attach(rl->task, &task);
isc_timer_detach(&rl->timer);
/*
@@ -276,6 +279,7 @@ ratelimiter_shutdowncomplete(isc_task_t *task, isc_event_t *event) {
UNUSED(task);
isc_ratelimiter_detach(&rl);
+ isc_task_detach(&task);
}
static void
--
2.23.0