From cdab00a0c63dc8fa6a69877799af665564170b9b Mon Sep 17 00:00:00 2001 From: Emil Fresk Date: Mon, 27 Sep 2021 15:29:42 +0200 Subject: [PATCH] Fix a bug in the timer queue due to comparison bug in embedded-time --- src/tq.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/tq.rs b/src/tq.rs index dcaccc9e7d..44f8dd4cbb 100644 --- a/src/tq.rs +++ b/src/tq.rs @@ -111,7 +111,9 @@ where mono.clear_compare_flag(); if let Some(instant) = self.0.peek().map(|p| p.instant) { - if instant <= unwrapper(Clock::try_now(mono)) { + let now = unwrapper(Clock::try_now(mono)); + // This if statement is like this and not <= due to a bug in embedded-time + if instant < now || instant == now { // task became ready let nr = unsafe { self.0.pop_unchecked() }; @@ -124,7 +126,8 @@ where // dequeue. If the monotonic is fast enough it can happen that from the // read of now to the set of the compare, the time can overflow. This is to // guard against this. - if instant <= unwrapper(Clock::try_now(mono)) { + let now = unwrapper(Clock::try_now(mono)); + if instant < now || instant == now { let nr = unsafe { self.0.pop_unchecked() }; Some((nr.task, nr.index))