MT#62181 wheeltimer: support absolute expiry

Move determination of absolute expiry time up into insert_timer(), and
make the rest of the code operate on absolute time. Add an extra method
to directly support absolute time.

Change-Id: I0a8dd27d82fb69b5083a6cfab693bfb275738495
mr13.3.1
Richard Fuchs 1 year ago
parent aa356b37ac
commit debca6dd3f

@ -46,9 +46,14 @@ timer::~timer()
}
void _wheeltimer::insert_timer(timer* t, uint64_t relative_us)
{
insert_timer_abs(t, (gettimeofday_us() + relative_us));
}
void _wheeltimer::insert_timer_abs(timer* t, uint64_t us)
{
std::lock_guard<std::mutex> lock(buckets_mut);
place_timer(t, relative_us);
place_timer(t, us);
// Wake up worker thread: The new timer might be the next one to run
buckets_cond.notify_one();
}
@ -144,9 +149,9 @@ uint64_t _wheeltimer::get_timer_bucket(timer* t)
return bucket;
}
void _wheeltimer::place_timer(timer* t, uint64_t relative_us)
void _wheeltimer::place_timer(timer* t, uint64_t us)
{
t->arm(relative_us);
t->arm(us);
uint64_t bucket = get_timer_bucket(t);
add_timer_to_bucket(t, bucket);
}

@ -72,11 +72,11 @@ public:
}
private:
void arm(uint64_t relative)
void arm(uint64_t us)
{
if (expires)
return;
expires = relative + gettimeofday_us();
expires = us;
}
void link(timer_list& new_list)
@ -159,6 +159,7 @@ public:
}
void insert_timer(timer* t, uint64_t relative_expiry_us);
void insert_timer_abs(timer* t, uint64_t expiry_us);
void remove_timer(timer* t);
};

Loading…
Cancel
Save