mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-05 00:55:24 +00:00
isc/timer: use isc_refcount_t
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include <isc/once.h>
|
||||
#include <isc/platform.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/refcount.h>
|
||||
#include <isc/task.h>
|
||||
#include <isc/thread.h>
|
||||
#include <isc/time.h>
|
||||
@@ -61,8 +62,8 @@ struct isc__timer {
|
||||
isc_timer_t common;
|
||||
isc__timermgr_t * manager;
|
||||
isc_mutex_t lock;
|
||||
isc_refcount_t references;
|
||||
/*! Locked by timer lock. */
|
||||
unsigned int references;
|
||||
isc_time_t idle;
|
||||
/*! Locked by manager lock. */
|
||||
isc_timertype_t type;
|
||||
@@ -284,7 +285,7 @@ isc_timer_create(isc_timermgr_t *manager0, isc_timertype_t type,
|
||||
return (ISC_R_NOMEMORY);
|
||||
|
||||
timer->manager = manager;
|
||||
timer->references = 1;
|
||||
isc_refcount_init(&timer->references, 1);
|
||||
|
||||
if (type == isc_timertype_once && !isc_interval_iszero(interval)) {
|
||||
result = isc_time_add(&now, interval, &timer->idle);
|
||||
@@ -479,10 +480,7 @@ isc_timer_attach(isc_timer_t *timer0, isc_timer_t **timerp) {
|
||||
|
||||
REQUIRE(VALID_TIMER(timer));
|
||||
REQUIRE(timerp != NULL && *timerp == NULL);
|
||||
|
||||
LOCK(&timer->lock);
|
||||
timer->references++;
|
||||
UNLOCK(&timer->lock);
|
||||
isc_refcount_increment(&timer->references);
|
||||
|
||||
*timerp = (isc_timer_t *)timer;
|
||||
}
|
||||
@@ -490,7 +488,6 @@ isc_timer_attach(isc_timer_t *timer0, isc_timer_t **timerp) {
|
||||
void
|
||||
isc_timer_detach(isc_timer_t **timerp) {
|
||||
isc__timer_t *timer;
|
||||
bool free_timer = false;
|
||||
|
||||
/*
|
||||
* Detach *timerp from its timer.
|
||||
@@ -500,15 +497,9 @@ isc_timer_detach(isc_timer_t **timerp) {
|
||||
timer = (isc__timer_t *)*timerp;
|
||||
REQUIRE(VALID_TIMER(timer));
|
||||
|
||||
LOCK(&timer->lock);
|
||||
REQUIRE(timer->references > 0);
|
||||
timer->references--;
|
||||
if (timer->references == 0)
|
||||
free_timer = true;
|
||||
UNLOCK(&timer->lock);
|
||||
|
||||
if (free_timer)
|
||||
if (isc_refcount_decrement(&timer->references) == 1) {
|
||||
destroy(timer);
|
||||
}
|
||||
|
||||
*timerp = NULL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user