summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/event/Loop.cxx17
-rw-r--r--src/event/Loop.hxx19
-rw-r--r--src/event/TimeoutMonitor.hxx6
3 files changed, 28 insertions, 14 deletions
diff --git a/src/event/Loop.cxx b/src/event/Loop.cxx
index 8e2098851..5a9be77e7 100644
--- a/src/event/Loop.cxx
+++ b/src/event/Loop.cxx
@@ -27,6 +27,18 @@
#include <algorithm>
+inline std::chrono::steady_clock::time_point
+EventLoop::TimerRecord::GetDue() const noexcept
+{
+ return timer.due;
+}
+
+inline bool
+EventLoop::TimerRecord::operator<(const TimerRecord &other) const noexcept
+{
+ return timer.due < other.timer.due;
+}
+
EventLoop::EventLoop(ThreadId _thread)
:SocketMonitor(*this), thread(_thread)
{
@@ -93,7 +105,8 @@ EventLoop::AddTimer(TimeoutMonitor &t, std::chrono::steady_clock::duration d)
{
assert(IsInside());
- timers.insert(TimerRecord(t, now + d));
+ t.due = now + d;
+ timers.insert(TimerRecord(t));
again = true;
}
@@ -150,7 +163,7 @@ EventLoop::Run()
break;
}
- timeout = i->due - now;
+ timeout = i->GetDue() - now;
if (timeout > timeout.zero())
break;
diff --git a/src/event/Loop.hxx b/src/event/Loop.hxx
index 895a7f553..2e1b6274c 100644
--- a/src/event/Loop.hxx
+++ b/src/event/Loop.hxx
@@ -51,21 +51,16 @@ class DeferredMonitor;
class EventLoop final : SocketMonitor
{
struct TimerRecord {
- /**
- * Projected monotonic_clock_ms() value when this
- * timer is due.
- */
- const std::chrono::steady_clock::time_point due;
-
TimeoutMonitor &timer;
- constexpr TimerRecord(TimeoutMonitor &_timer,
- std::chrono::steady_clock::time_point _due)
- :due(_due), timer(_timer) {}
+ explicit constexpr TimerRecord(TimeoutMonitor &_timer)
+ :timer(_timer) {}
+
+ gcc_pure
+ std::chrono::steady_clock::time_point GetDue() const noexcept;
- bool operator<(const TimerRecord &other) const {
- return due < other.due;
- }
+ gcc_pure
+ bool operator<(const TimerRecord &other) const noexcept;
};
WakeFD wake_fd;
diff --git a/src/event/TimeoutMonitor.hxx b/src/event/TimeoutMonitor.hxx
index 28000c3f6..f29fbd8af 100644
--- a/src/event/TimeoutMonitor.hxx
+++ b/src/event/TimeoutMonitor.hxx
@@ -39,6 +39,12 @@ class TimeoutMonitor {
EventLoop &loop;
+ /**
+ * When is this timer due? This is only valid if #active is
+ * true.
+ */
+ std::chrono::steady_clock::time_point due;
+
bool active;
public: