mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 22:45:39 +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
|
4551. [test] Add system tests for integrity checks of MX and
|
||||||
SRV records. [RT #43953]
|
SRV records. [RT #43953]
|
||||||
|
|
||||||
|
@@ -32,7 +32,8 @@ typedef void (*isc_eventdestructor_t)(isc_event_t *);
|
|||||||
void * ev_sender; \
|
void * ev_sender; \
|
||||||
isc_eventdestructor_t ev_destroy; \
|
isc_eventdestructor_t ev_destroy; \
|
||||||
void * ev_destroy_arg; \
|
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
|
* 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 = (df); \
|
||||||
(event)->ev_destroy_arg = (da); \
|
(event)->ev_destroy_arg = (da); \
|
||||||
ISC_LINK_INIT((event), ev_link); \
|
ISC_LINK_INIT((event), ev_link); \
|
||||||
|
ISC_LINK_INIT((event), ev_ratelink); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/*%
|
/*%
|
||||||
|
@@ -157,9 +157,9 @@ isc_ratelimiter_enqueue(isc_ratelimiter_t *rl, isc_task_t *task,
|
|||||||
ev->ev_sender = task;
|
ev->ev_sender = task;
|
||||||
*eventp = NULL;
|
*eventp = NULL;
|
||||||
if (rl->pushpop)
|
if (rl->pushpop)
|
||||||
ISC_LIST_PREPEND(rl->pending, ev, ev_link);
|
ISC_LIST_PREPEND(rl->pending, ev, ev_ratelink);
|
||||||
else
|
else
|
||||||
ISC_LIST_APPEND(rl->pending, ev, ev_link);
|
ISC_LIST_APPEND(rl->pending, ev, ev_ratelink);
|
||||||
} else if (rl->state == isc_ratelimiter_idle) {
|
} else if (rl->state == isc_ratelimiter_idle) {
|
||||||
result = isc_timer_reset(rl->timer, isc_timertype_ticker, NULL,
|
result = isc_timer_reset(rl->timer, isc_timertype_ticker, NULL,
|
||||||
&rl->interval, ISC_FALSE);
|
&rl->interval, ISC_FALSE);
|
||||||
@@ -185,8 +185,8 @@ isc_ratelimiter_dequeue(isc_ratelimiter_t *rl, isc_event_t *event) {
|
|||||||
REQUIRE(event != NULL);
|
REQUIRE(event != NULL);
|
||||||
|
|
||||||
LOCK(&rl->lock);
|
LOCK(&rl->lock);
|
||||||
if (ISC_LINK_LINKED(event, ev_link)) {
|
if (ISC_LINK_LINKED(event, ev_ratelink)) {
|
||||||
ISC_LIST_UNLINK(rl->pending, event, ev_link);
|
ISC_LIST_UNLINK(rl->pending, event, ev_ratelink);
|
||||||
event->ev_sender = NULL;
|
event->ev_sender = NULL;
|
||||||
} else
|
} else
|
||||||
result = ISC_R_NOTFOUND;
|
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.
|
* 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 {
|
} else {
|
||||||
/*
|
/*
|
||||||
* No work left to do. Stop the timer so that we don't
|
* 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,
|
(void)isc_timer_reset(rl->timer, isc_timertype_inactive,
|
||||||
NULL, NULL, ISC_FALSE);
|
NULL, NULL, ISC_FALSE);
|
||||||
while ((ev = ISC_LIST_HEAD(rl->pending)) != NULL) {
|
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;
|
ev->ev_attributes |= ISC_EVENTATTR_CANCELED;
|
||||||
task = ev->ev_sender;
|
task = ev->ev_sender;
|
||||||
isc_task_send(task, &ev);
|
isc_task_send(task, &ev);
|
||||||
|
@@ -546,6 +546,7 @@ task_send(isc__task_t *task, isc_event_t **eventp) {
|
|||||||
REQUIRE(event != NULL);
|
REQUIRE(event != NULL);
|
||||||
REQUIRE(event->ev_type > 0);
|
REQUIRE(event->ev_type > 0);
|
||||||
REQUIRE(task->state != task_state_done);
|
REQUIRE(task->state != task_state_done);
|
||||||
|
REQUIRE(!ISC_LINK_LINKED(event, ev_ratelink));
|
||||||
|
|
||||||
XTRACE("task_send");
|
XTRACE("task_send");
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user