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
mr13.3.1
Donat Zenichev 1 year ago
parent b91f4f6c93
commit f6b48fa6d9

@ -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<std::mutex> 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;
}
}

@ -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<std::mutex>&);
@ -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;

Loading…
Cancel
Save