From eeb5318c25ac8bce5c1d1a14847768715cb68e79 Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Sun, 26 Apr 2020 12:59:27 -0700 Subject: [PATCH] Kernel: Expose timers via a TimerId type The public consumers of the timer API shouldn't need to know the how timer id's are tracked internally. Expose a typedef instead to allow the internal implementation to be protected from potential churn in the future. It's also just good API design. --- Kernel/Thread.cpp | 2 +- Kernel/TimerQueue.cpp | 6 +++--- Kernel/TimerQueue.h | 10 ++++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index a15c5c388b..6702d00564 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -893,7 +893,7 @@ Thread::BlockResult Thread::wait_on(WaitQueue& queue, timeval* timeout, Atomic&& timer) +TimerId TimerQueue::add_timer(NonnullOwnPtr&& timer) { ASSERT(timer->expires >= g_uptime); @@ -64,7 +64,7 @@ u64 TimerQueue::add_timer(NonnullOwnPtr&& timer) return m_timer_id_count; } -u64 TimerQueue::add_timer(timeval& deadline, Function&& callback) +TimerId TimerQueue::add_timer(timeval& deadline, Function&& callback) { NonnullOwnPtr timer = make(); timer->expires = g_uptime + seconds_to_ticks(deadline.tv_sec) + microseconds_to_ticks(deadline.tv_usec); @@ -72,7 +72,7 @@ u64 TimerQueue::add_timer(timeval& deadline, Function&& callback) return add_timer(move(timer)); } -bool TimerQueue::cancel_timer(u64 id) +bool TimerQueue::cancel_timer(TimerId id) { auto it = m_timer_queue.find([id](auto& timer) { return timer->id == id; }); if (it.is_end()) diff --git a/Kernel/TimerQueue.h b/Kernel/TimerQueue.h index d0fd9d0381..449609da94 100644 --- a/Kernel/TimerQueue.h +++ b/Kernel/TimerQueue.h @@ -34,8 +34,10 @@ namespace Kernel { +typedef u64 TimerId; + struct Timer { - u64 id; + TimerId id; u64 expires; Function callback; bool operator<(const Timer& rhs) const @@ -56,9 +58,9 @@ class TimerQueue { public: static TimerQueue& the(); - u64 add_timer(NonnullOwnPtr&&); - u64 add_timer(timeval& timeout, Function&& callback); - bool cancel_timer(u64 id); + TimerId add_timer(NonnullOwnPtr&&); + TimerId add_timer(timeval& timeout, Function&& callback); + bool cancel_timer(TimerId id); void fire(); private: