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;