// Custom includes
#include <errno.h>
#include <sys/epoll.h>
-#include "Utils/Exception.hh"
+#include "../Utils/Exception.hh"
static const int EPollInitialSize = 16;
eventTime_ = ClockService::now();
while (! terminate_) {
+ // Since a callback may have disabled further timers, we need to check for canceled timeouts
+ // again.
+
while (! timerQueue_.empty()) {
TimerMap::iterator i (timerQueue_.top());
if (! i->second.canceled)
// We always run event handlers. This is important, even if a file-descriptor is signaled
// since some descriptors (e.g. real files) will *always* be ready and we still may want to
- // handle timers
+ // handle timers.
+ // Time handlers are run before file events to not delay them unnecessarily.
while (! timerQueue_.empty()) {
TimerMap::iterator i (timerQueue_.top());
i->second.cb();
else
break;
- timerMap_.erase(i);
timerQueue_.pop();
+ timerMap_.erase(i);
}
if (events <= 0)