mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-01 06:55:30 +00:00
4552. [bug] Named could trigger a assertion when sending notify
messages. [RT #44019]
This commit is contained in:
3
CHANGES
3
CHANGES
@@ -1,3 +1,6 @@
|
||||
4552. [bug] Named could trigger a assertion when sending notify
|
||||
messages. [RT #44019]
|
||||
|
||||
4551. [test] Add system tests for integrity checks of MX and
|
||||
SRV records. [RT #43953]
|
||||
|
||||
|
@@ -32,7 +32,8 @@ typedef void (*isc_eventdestructor_t)(isc_event_t *);
|
||||
void * ev_sender; \
|
||||
isc_eventdestructor_t ev_destroy; \
|
||||
void * ev_destroy_arg; \
|
||||
ISC_LINK(ltype) ev_link
|
||||
ISC_LINK(ltype) ev_link; \
|
||||
ISC_LINK(ltype) ev_ratelink;
|
||||
|
||||
/*%
|
||||
* Attributes matching a mask of 0x000000ff are reserved for the task library's
|
||||
@@ -62,6 +63,7 @@ do { \
|
||||
(event)->ev_destroy = (df); \
|
||||
(event)->ev_destroy_arg = (da); \
|
||||
ISC_LINK_INIT((event), ev_link); \
|
||||
ISC_LINK_INIT((event), ev_ratelink); \
|
||||
} while (0)
|
||||
|
||||
/*%
|
||||
|
@@ -157,9 +157,9 @@ isc_ratelimiter_enqueue(isc_ratelimiter_t *rl, isc_task_t *task,
|
||||
ev->ev_sender = task;
|
||||
*eventp = NULL;
|
||||
if (rl->pushpop)
|
||||
ISC_LIST_PREPEND(rl->pending, ev, ev_link);
|
||||
ISC_LIST_PREPEND(rl->pending, ev, ev_ratelink);
|
||||
else
|
||||
ISC_LIST_APPEND(rl->pending, ev, ev_link);
|
||||
ISC_LIST_APPEND(rl->pending, ev, ev_ratelink);
|
||||
} else if (rl->state == isc_ratelimiter_idle) {
|
||||
result = isc_timer_reset(rl->timer, isc_timertype_ticker, NULL,
|
||||
&rl->interval, ISC_FALSE);
|
||||
@@ -185,8 +185,8 @@ isc_ratelimiter_dequeue(isc_ratelimiter_t *rl, isc_event_t *event) {
|
||||
REQUIRE(event != NULL);
|
||||
|
||||
LOCK(&rl->lock);
|
||||
if (ISC_LINK_LINKED(event, ev_link)) {
|
||||
ISC_LIST_UNLINK(rl->pending, event, ev_link);
|
||||
if (ISC_LINK_LINKED(event, ev_ratelink)) {
|
||||
ISC_LIST_UNLINK(rl->pending, event, ev_ratelink);
|
||||
event->ev_sender = NULL;
|
||||
} else
|
||||
result = ISC_R_NOTFOUND;
|
||||
@@ -214,7 +214,7 @@ ratelimiter_tick(isc_task_t *task, isc_event_t *event) {
|
||||
/*
|
||||
* There is work to do. Let's do it after unlocking.
|
||||
*/
|
||||
ISC_LIST_UNLINK(rl->pending, p, ev_link);
|
||||
ISC_LIST_UNLINK(rl->pending, p, ev_ratelink);
|
||||
} else {
|
||||
/*
|
||||
* No work left to do. Stop the timer so that we don't
|
||||
@@ -248,7 +248,7 @@ isc_ratelimiter_shutdown(isc_ratelimiter_t *rl) {
|
||||
(void)isc_timer_reset(rl->timer, isc_timertype_inactive,
|
||||
NULL, NULL, ISC_FALSE);
|
||||
while ((ev = ISC_LIST_HEAD(rl->pending)) != NULL) {
|
||||
ISC_LIST_UNLINK(rl->pending, ev, ev_link);
|
||||
ISC_LIST_UNLINK(rl->pending, ev, ev_ratelink);
|
||||
ev->ev_attributes |= ISC_EVENTATTR_CANCELED;
|
||||
task = ev->ev_sender;
|
||||
isc_task_send(task, &ev);
|
||||
|
@@ -546,6 +546,7 @@ task_send(isc__task_t *task, isc_event_t **eventp) {
|
||||
REQUIRE(event != NULL);
|
||||
REQUIRE(event->ev_type > 0);
|
||||
REQUIRE(task->state != task_state_done);
|
||||
REQUIRE(!ISC_LINK_LINKED(event, ev_ratelink));
|
||||
|
||||
XTRACE("task_send");
|
||||
|
||||
|
Reference in New Issue
Block a user