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() {
|
fn alarm_thread() {
|
||||||
|
let zero = unsafe { DRIVER.zero_instant.read() };
|
||||||
loop {
|
loop {
|
||||||
let now = DRIVER.now();
|
let now = DRIVER.now();
|
||||||
|
|
||||||
@ -86,8 +87,10 @@ impl TimeDriver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let until =
|
// Ensure we don't overflow
|
||||||
unsafe { DRIVER.zero_instant.read() } + StdDuration::from_micros(next_alarm);
|
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);
|
unsafe { DRIVER.signaler.as_ref() }.wait_until(until);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user