From 420f84f3f59b32a2238743f92fed4f23a74f6a17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Witold=20Kr=C4=99cicki?= Date: Thu, 16 May 2019 18:53:33 +0200 Subject: [PATCH] isc/timer: use isc_refcount_t --- lib/isc/timer.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/lib/isc/timer.c b/lib/isc/timer.c index 729fcb5608..b5455688f2 100644 --- a/lib/isc/timer.c +++ b/lib/isc/timer.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -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; }