sched: Fix scheduling bug in repeat scheduler check

Commit 7d95a004 introduced a defect - if the cached timer pointed to
by last_insert did not reschedule itself then the cache would not be
in a valid state and other active timers may not get properly
rescheduled.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2021-11-06 00:19:48 -04:00
parent dccd555409
commit 9ecddd1ba4
1 changed files with 2 additions and 0 deletions

View File

@ -161,6 +161,8 @@ sched_timer_dispatch(void)
// Update timer_list (rescheduling current timer if necessary) // Update timer_list (rescheduling current timer if necessary)
unsigned int next_waketime = updated_waketime; unsigned int next_waketime = updated_waketime;
if (unlikely(res == SF_DONE)) { if (unlikely(res == SF_DONE)) {
if (SchedStatus.last_insert == t)
SchedStatus.last_insert = t->next;
next_waketime = t->next->waketime; next_waketime = t->next->waketime;
SchedStatus.timer_list = t->next; SchedStatus.timer_list = t->next;
} else if (!timer_is_before(updated_waketime, t->next->waketime)) { } else if (!timer_is_before(updated_waketime, t->next->waketime)) {