diff --git a/src/modm/processing/fiber/functions.hpp b/src/modm/processing/fiber/functions.hpp index abfb1482db..4f1c11d46b 100644 --- a/src/modm/processing/fiber/functions.hpp +++ b/src/modm/processing/fiber/functions.hpp @@ -87,12 +87,20 @@ poll_for(std::chrono::duration sleep_duration, Function &&condition std::chrono::duration>, modm::chrono::milli_clock, modm::chrono::micro_clock>; + // Ensure the sleep duration is at least 1 clock tick + using Duration = typename Clock::duration; + Duration clock_sleep_duration(std::chrono::duration_cast(sleep_duration)); + if constexpr (std::ratio_less_v) { + if (clock_sleep_duration == Duration(0)) + clock_sleep_duration = Duration(1); + } + const auto start = Clock::now(); do { modm::this_fiber::yield(); if (std::forward(condition)()) return true; } - while((Clock::now() - start) <= sleep_duration); + while((Clock::now() - start) <= clock_sleep_duration); return false; }