From e871589575cdf5171d0902db7849a021e8cb002a Mon Sep 17 00:00:00 2001 From: tison Date: Thu, 12 Dec 2024 01:58:57 +0800 Subject: [PATCH] fix: initial delay should take care of shutdown signal (#7) Signed-off-by: tison --- fastimer/src/schedule/arbitrary.rs | 7 ++++++- fastimer/src/schedule/simple.rs | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/fastimer/src/schedule/arbitrary.rs b/fastimer/src/schedule/arbitrary.rs index 3e6c0a8..9acafd3 100644 --- a/fastimer/src/schedule/arbitrary.rs +++ b/fastimer/src/schedule/arbitrary.rs @@ -66,7 +66,12 @@ pub trait ArbitraryDelayActionExt: ArbitraryDelayAction { if let Some(initial_delay) = initial_delay { if initial_delay > Duration::ZERO { - make_delay.delay(initial_delay).await; + let is_shutdown = self.is_shutdown(); + let delay = make_delay.delay(initial_delay); + if let Either::Left(()) = select(is_shutdown, delay).await { + self.teardown(); + return; + } } } diff --git a/fastimer/src/schedule/simple.rs b/fastimer/src/schedule/simple.rs index 90f568d..6148228 100644 --- a/fastimer/src/schedule/simple.rs +++ b/fastimer/src/schedule/simple.rs @@ -76,7 +76,12 @@ pub trait SimpleActionExt: SimpleAction { if let Some(initial_delay) = initial_delay { if initial_delay > Duration::ZERO { - make_delay.delay(initial_delay).await; + let is_shutdown = self.is_shutdown(); + let delay = make_delay.delay(initial_delay); + if let Either::Left(()) = select(is_shutdown, delay).await { + self.teardown(); + return; + }; } } @@ -159,7 +164,12 @@ pub trait SimpleActionExt: SimpleAction { if let Some(initial_delay) = initial_delay { if initial_delay > Duration::ZERO { next = make_instant_from_now(initial_delay); - make_delay.delay_util(next).await; + let is_shutdown = self.is_shutdown(); + let delay = make_delay.delay_util(next); + if let Either::Left(()) = select(is_shutdown, delay).await { + self.teardown(); + return; + }; } }