mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-02 07:35:26 +00:00
a timer now uses the mctx of its task
This commit is contained in:
@@ -51,6 +51,7 @@ struct isc_timer {
|
|||||||
/* Not locked. */
|
/* Not locked. */
|
||||||
unsigned int magic;
|
unsigned int magic;
|
||||||
isc_timermgr_t * manager;
|
isc_timermgr_t * manager;
|
||||||
|
isc_mem_t * mctx;
|
||||||
isc_mutex_t lock;
|
isc_mutex_t lock;
|
||||||
/* Locked by timer lock. */
|
/* Locked by timer lock. */
|
||||||
unsigned int references;
|
unsigned int references;
|
||||||
@@ -203,7 +204,7 @@ destroy(isc_timer_t *timer) {
|
|||||||
isc_task_detach(&timer->task);
|
isc_task_detach(&timer->task);
|
||||||
(void)isc_mutex_destroy(&timer->lock);
|
(void)isc_mutex_destroy(&timer->lock);
|
||||||
timer->magic = 0;
|
timer->magic = 0;
|
||||||
isc_mem_put(manager->mctx, timer, sizeof *timer);
|
isc_mem_put(timer->mctx, timer, sizeof *timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
@@ -215,6 +216,7 @@ isc_timer_create(isc_timermgr_t *manager, isc_timertype_t type,
|
|||||||
isc_timer_t *timer;
|
isc_timer_t *timer;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
isc_time_t now;
|
isc_time_t now;
|
||||||
|
isc_mem_t *mctx;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a new 'type' timer managed by 'manager'. The timers
|
* Create a new 'type' timer managed by 'manager'. The timers
|
||||||
@@ -241,11 +243,13 @@ isc_timer_create(isc_timermgr_t *manager, isc_timertype_t type,
|
|||||||
return (ISC_R_UNEXPECTED);
|
return (ISC_R_UNEXPECTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
timer = isc_mem_get(manager->mctx, sizeof *timer);
|
mctx = isc_task_mem(task);
|
||||||
|
timer = isc_mem_get(mctx, sizeof *timer);
|
||||||
if (timer == NULL)
|
if (timer == NULL)
|
||||||
return (ISC_R_NOMEMORY);
|
return (ISC_R_NOMEMORY);
|
||||||
|
|
||||||
timer->manager = manager;
|
timer->manager = manager;
|
||||||
|
timer->mctx = mctx;
|
||||||
timer->references = 1;
|
timer->references = 1;
|
||||||
if (type == isc_timertype_once && !isc_interval_iszero(interval))
|
if (type == isc_timertype_once && !isc_interval_iszero(interval))
|
||||||
isc_time_add(&now, interval, &timer->idle);
|
isc_time_add(&now, interval, &timer->idle);
|
||||||
@@ -261,7 +265,7 @@ isc_timer_create(isc_timermgr_t *manager, isc_timertype_t type,
|
|||||||
timer->index = 0;
|
timer->index = 0;
|
||||||
if (isc_mutex_init(&timer->lock) != ISC_R_SUCCESS) {
|
if (isc_mutex_init(&timer->lock) != ISC_R_SUCCESS) {
|
||||||
isc_task_detach(&timer->task);
|
isc_task_detach(&timer->task);
|
||||||
isc_mem_put(manager->mctx, timer, sizeof *timer);
|
isc_mem_put(mctx, timer, sizeof *timer);
|
||||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||||
"isc_mutex_init() failed");
|
"isc_mutex_init() failed");
|
||||||
return (ISC_R_UNEXPECTED);
|
return (ISC_R_UNEXPECTED);
|
||||||
@@ -285,7 +289,7 @@ isc_timer_create(isc_timermgr_t *manager, isc_timertype_t type,
|
|||||||
timer->magic = 0;
|
timer->magic = 0;
|
||||||
(void)isc_mutex_destroy(&timer->lock);
|
(void)isc_mutex_destroy(&timer->lock);
|
||||||
isc_task_detach(&timer->task);
|
isc_task_detach(&timer->task);
|
||||||
isc_mem_put(manager->mctx, timer, sizeof *timer);
|
isc_mem_put(mctx, timer, sizeof *timer);
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,7 +463,7 @@ dispatch(isc_timermgr_t *manager, isc_time_t *now) {
|
|||||||
/*
|
/*
|
||||||
* XXX We could preallocate this event.
|
* XXX We could preallocate this event.
|
||||||
*/
|
*/
|
||||||
event = isc_event_allocate(manager->mctx,
|
event = isc_event_allocate(timer->mctx,
|
||||||
timer,
|
timer,
|
||||||
type,
|
type,
|
||||||
timer->action,
|
timer->action,
|
||||||
|
Reference in New Issue
Block a user