diff --git a/src/timer/timer.h b/src/timer/timer.h index 3b76be0bac..982b86732c 100644 --- a/src/timer/timer.h +++ b/src/timer/timer.h @@ -98,7 +98,7 @@ public: */ void SetInterval(const TPeriod interval, bool reset = true) { - this->period = interval; + TimerManager::ChangeRegisteredTimerPeriod(*this, interval); if (reset) this->storage = {}; } @@ -150,7 +150,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 c3b45a73bd..92e45ccc17 100644 --- a/src/timer/timer_manager.h +++ b/src/timer/timer_manager.h @@ -56,6 +56,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.