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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user