diff options
Diffstat (limited to '')
-rw-r--r-- | src/event/Loop.cxx | 6 | ||||
-rw-r--r-- | src/event/Loop.hxx | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/event/Loop.cxx b/src/event/Loop.cxx index e32ba5582..40a2469a2 100644 --- a/src/event/Loop.cxx +++ b/src/event/Loop.cxx @@ -79,6 +79,7 @@ EventLoop::AddIdle(IdleMonitor &i) assert(std::find(idle.begin(), idle.end(), &i) == idle.end()); idle.push_back(&i); + again = true; } void @@ -98,6 +99,7 @@ EventLoop::AddTimer(TimeoutMonitor &t, unsigned ms) assert(IsInside()); timers.insert(TimerRecord(t, now_ms + ms)); + again = true; } void @@ -123,6 +125,7 @@ EventLoop::Run() do { now_ms = ::MonotonicClockMS(); + again = false; /* invoke timers */ @@ -149,7 +152,6 @@ EventLoop::Run() /* invoke idle */ - const bool idle_empty = idle.empty(); while (!idle.empty()) { IdleMonitor &m = *idle.front(); idle.pop_front(); @@ -159,7 +161,7 @@ EventLoop::Run() return; } - if (!idle_empty) + if (again) /* re-evaluate timers because one of the IdleMonitors may have added a new timeout */ diff --git a/src/event/Loop.hxx b/src/event/Loop.hxx index e8c737e1e..bfa8dc4a9 100644 --- a/src/event/Loop.hxx +++ b/src/event/Loop.hxx @@ -84,6 +84,12 @@ class EventLoop final : SocketMonitor bool quit; + /** + * True when the object has been modified and another check is + * necessary before going to sleep via PollGroup::ReadEvents(). + */ + bool again; + PollGroup poll_group; PollResult poll_result; |