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