Fix re-enqueuing of periodic timers. Fixes #25.
Periodic timers were first re-enqueued and then removed, effectively causing them to stay at their old position, cutting off the tail of the timer queue.
This commit is contained in:
parent
ef7c19d373
commit
60407b783b
|
@ -51,14 +51,15 @@ final class LoopTimeoutTimerDriver : EventDriverTimers {
|
||||||
if (tm.repeatDuration > 0) {
|
if (tm.repeatDuration > 0) {
|
||||||
do tm.timeout += tm.repeatDuration;
|
do tm.timeout += tm.repeatDuration;
|
||||||
while (tm.timeout <= stdtime);
|
while (tm.timeout <= stdtime);
|
||||||
enqueueTimer(tm);
|
|
||||||
} else tm.pending = false;
|
} else tm.pending = false;
|
||||||
m_firedTimers ~= tm;
|
m_firedTimers ~= tm;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: this isn't yet verified to work under all circumstances
|
foreach (tm; m_firedTimers) {
|
||||||
foreach (tm; m_firedTimers)
|
|
||||||
m_timerQueue.remove(tm);
|
m_timerQueue.remove(tm);
|
||||||
|
if (tm.repeatDuration > 0)
|
||||||
|
enqueueTimer(tm);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (tm; m_firedTimers) {
|
foreach (tm; m_firedTimers) {
|
||||||
auto cb = tm.callback;
|
auto cb = tm.callback;
|
||||||
|
|
Loading…
Reference in a new issue