diff --git a/src/timer/timer.h b/src/timer/timer.h index 7a20dc3888..f6b433ef8c 100644 --- a/src/timer/timer.h +++ b/src/timer/timer.h @@ -99,7 +99,7 @@ public: */ void SetInterval(const TPeriod interval, bool reset = true) { - this->period = interval; + TimerManager::ChangeRegisteredTimerPeriod(*this, interval); if (reset) this->storage = {}; } @@ -151,7 +151,7 @@ public: */ void Reset(const TPeriod timeout) { - this->period = timeout; + TimerManager::ChangeRegisteredTimerPeriod(*this, timeout); this->fired = false; this->storage = {}; } diff --git a/src/timer/timer_manager.h b/src/timer/timer_manager.h index 118c311854..b1f3db46f0 100644 --- a/src/timer/timer_manager.h +++ b/src/timer/timer_manager.h @@ -57,6 +57,20 @@ public: GetTimers().erase(&timer); } + /** + * Change the period of a registered timer. + * + * @param timer The timer to change the period of. + * @param new_period The new period value. + */ + static void ChangeRegisteredTimerPeriod(BaseTimer &timer, TPeriod new_period) + { + /* Unregistration and re-registration is necessary because the period is used as the sort key in base_timer_sorter */ + UnregisterTimer(timer); + timer.period = new_period; + RegisterTimer(timer); + } + #ifdef WITH_ASSERT /** * Validate that a new period is actually valid.