Merge #439
439: Prevent overflow in std timer driver r=lulf a=lulf This prevents the std time driver from overflowing when setting the next wakeup time. If an overflow occurs, default to sleeping up to 1 second. Fixes #438 Co-authored-by: Ulf Lilleengen <ulf.lilleengen@gmail.com>
This commit is contained in:
commit
a895b6351f
@ -63,6 +63,7 @@ impl TimeDriver {
|
||||
}
|
||||
|
||||
fn alarm_thread() {
|
||||
let zero = unsafe { DRIVER.zero_instant.read() };
|
||||
loop {
|
||||
let now = DRIVER.now();
|
||||
|
||||
@ -86,8 +87,10 @@ impl TimeDriver {
|
||||
}
|
||||
}
|
||||
|
||||
let until =
|
||||
unsafe { DRIVER.zero_instant.read() } + StdDuration::from_micros(next_alarm);
|
||||
// Ensure we don't overflow
|
||||
let until = zero
|
||||
.checked_add(StdDuration::from_micros(next_alarm))
|
||||
.unwrap_or_else(|| StdInstant::now() + StdDuration::from_secs(1));
|
||||
|
||||
unsafe { DRIVER.signaler.as_ref() }.wait_until(until);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user