Consider fired timers to be events that cause processEvents to return.
This commit is contained in:
parent
96a8c95b81
commit
1e27b33f26
|
@ -84,7 +84,7 @@ abstract class PosixEventDriver : EventDriver {
|
|||
got_events = doProcessEvents(nextto);
|
||||
long prev_step = now;
|
||||
now = currStdTime;
|
||||
processTimers(now);
|
||||
got_events |= processTimers(now);
|
||||
if (timeout != Duration.max)
|
||||
timeout -= (now - prev_step).hnsecs;
|
||||
} while (timeout > 0.seconds && !m_exit && !got_events);
|
||||
|
|
|
@ -34,10 +34,10 @@ mixin template DefaultTimerImpl() {
|
|||
return m_timerQueue.length ? (m_timerQueue.front.timeout - stdtime).hnsecs : Duration.max;
|
||||
}
|
||||
|
||||
final protected void processTimers(long stdtime)
|
||||
@trusted {
|
||||
final protected bool processTimers(long stdtime)
|
||||
@trusted nothrow {
|
||||
assert(m_firedTimers.length == 0);
|
||||
if (m_timerQueue.empty) return;
|
||||
if (m_timerQueue.empty) return false;
|
||||
|
||||
TimerSlot ts = void;
|
||||
ts.timeout = stdtime+1;
|
||||
|
@ -62,8 +62,12 @@ mixin template DefaultTimerImpl() {
|
|||
foreach (cb; tm.callbacks)
|
||||
cb(tm.id);
|
||||
|
||||
bool any_fired = m_firedTimers.length > 0;
|
||||
|
||||
m_firedTimers.length = 0;
|
||||
m_firedTimers.assumeSafeAppend();
|
||||
|
||||
return any_fired;
|
||||
}
|
||||
|
||||
final override TimerID createTimer()
|
||||
|
|
Loading…
Reference in a new issue