From f134a5678dd2262dd04d4629dde2b791be768fc9 Mon Sep 17 00:00:00 2001 From: ouyangxiangzhen Date: Fri, 24 Jul 2026 16:22:08 +0800 Subject: [PATCH] sched/hrtimer: Fix reprogram with wrong expiration when reinserting hrtimer In hrtimer_start_absolute, when a pending hrtimer is removed (was the head) and reinserted with a later expiration time, the reprogram flag remains true but the hrtimer is no longer the earliest timer in the queue. The old code passed hrtimer->expired to hrtimer_reprogram, which was incorrect. Use hrtimer_get_first()->expired to ensure the hardware timer is reprogrammed with the actual earliest timer's expiration time. Signed-off-by: ouyangxiangzhen --- sched/hrtimer/hrtimer_start.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sched/hrtimer/hrtimer_start.c b/sched/hrtimer/hrtimer_start.c index f994fd3ef3a..23c817abd70 100644 --- a/sched/hrtimer/hrtimer_start.c +++ b/sched/hrtimer/hrtimer_start.c @@ -88,7 +88,7 @@ int hrtimer_start_absolute(FAR hrtimer_t *hrtimer, hrtimer_entry_t func, if (reprogram) { - hrtimer_reprogram(hrtimer->expired); + hrtimer_reprogram(hrtimer_get_first()->expired); } /* Release the lock and give up the ownership of the hrtimer queue. */