From 29641e50f8037b698ae8f9b7a65ecdcf95072eea Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 28 Dec 2025 22:57:29 -0300 Subject: [PATCH] timer: fix bug --- kernel-src/sys/timer.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kernel-src/sys/timer.c b/kernel-src/sys/timer.c index 0522a3d8..a7ecbe2f 100644 --- a/kernel-src/sys/timer.c +++ b/kernel-src/sys/timer.c @@ -167,8 +167,13 @@ time_t timer_remove(timer_t *timer, timerentry_t *entry) { uintmax_t timeremaining = 0; // if it had already fired by the time the lock was reached - if (entry->fired == true) + if (entry->fired == true) { + if (timer->running && timer->queue) { + timercheck(timer); + arm_for_next_target(timer); + } goto cleanup; + } timerentry_t *iterator = timer->queue; timerentry_t *prev = NULL; @@ -190,7 +195,7 @@ time_t timer_remove(timer_t *timer, timerentry_t *entry) { // ALWAYS round up the time remaining timeremaining = ROUND_UP(iterator->absolutetick - timer->tickcurrent, timer->ticksperus) / timer->ticksperus; - if (timer->queue) { + if (timer->queue && timer->running) { timercheck(timer); arm_for_next_target(timer); }