From f6b48fa6d96da9b27d5aec8e1d9befe2fa9307ad Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Tue, 18 Mar 2025 15:57:01 +0100 Subject: [PATCH] MT#59962 wheeltimer: make timer dealloc variable Just in case some user still needs the object to be used through the code later. E.g.: DBRegAgent module. Change-Id: Iacd9104edfe757cf475ab25192411103124ed98b --- core/sip/wheeltimer.cpp | 12 ++++++++---- core/sip/wheeltimer.h | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/core/sip/wheeltimer.cpp b/core/sip/wheeltimer.cpp index 4bd98150..df5c581f 100644 --- a/core/sip/wheeltimer.cpp +++ b/core/sip/wheeltimer.cpp @@ -59,14 +59,14 @@ void _wheeltimer::insert_timer_abs(timer* t, uint64_t us, uint64_t latest) buckets_cond.notify_one(); } -void _wheeltimer::remove_timer(timer* t) +void _wheeltimer::remove_timer(timer* t, bool del_timer) { if (t == NULL){ return; } std::lock_guard lock(buckets_mut); - delete_timer(t); + delete_timer(t, del_timer); // Don't wake up worker thread: This is not necessary because in the worst case the // worker thread would wake up early, see that there's nothing to do, and just go to // sleep again @@ -193,13 +193,17 @@ void _wheeltimer::add_timer_to_bucket(timer* t, uint64_t bucket) } // requires buckets_mut mutex to be held -void _wheeltimer::delete_timer(timer* t) +void _wheeltimer::delete_timer(timer* t, bool del_timer) { if (t->disarm()) DBG("successfully removed timer [%p]\n", t); else DBG("timer [%p] not found for removing\n", t); - delete t; + + if (del_timer) { + DBG("timer object has been deallocated\n"); + delete t; + } } diff --git a/core/sip/wheeltimer.h b/core/sip/wheeltimer.h index a1ada79b..250a4971 100644 --- a/core/sip/wheeltimer.h +++ b/core/sip/wheeltimer.h @@ -132,7 +132,7 @@ class _wheeltimer: void add_timer_to_bucket(timer* t, uint64_t); uint64_t get_timer_bucket(uint64_t); uint64_t get_timer_bucket(timer*); - void delete_timer(timer* t); + void delete_timer(timer* t, bool del_timer = true); void process_current_timers(timer_list&, std::unique_lock&); @@ -169,7 +169,7 @@ public: void insert_timer(timer* t, uint64_t relative_expiry_us, uint64_t latest_expiry = 0); void insert_timer_abs(timer* t, uint64_t expiry_us, uint64_t latest = 0); - void remove_timer(timer* t); + void remove_timer(timer* t, bool del_timer = true); }; typedef singleton<_wheeltimer> wheeltimer;