De-duplicate code
diff --git a/src/timer.rs b/src/timer.rs index 460d5b6..9a43027 100644 --- a/src/timer.rs +++ b/src/timer.rs
@@ -423,37 +423,8 @@ let suspended_timer: Cell<Option<ActiveTimer>> = Cell::new(None); futures::wait_until(|| { - let now = match get_current_ticks() { - Ok(value) => value, - Err(_) => return false, - }; - if let Some(active) = self.context.active_timer.get() { - if left_is_later(active, this_alarm) { - suspended_timer.set(Some(active)); - match self.activate_timer(&this_alarm) { - Ok(_) => (), - Err(_) => return false, - }; - } - } else { - match self.activate_timer(&this_alarm) { - Ok(_) => (), - Err(_) => return false, - }; - } - if is_over(this_alarm, now as u32) { - if let Some(paused) = suspended_timer.get() { - match self.activate_timer(&paused) { - Ok(_) => (), - Err(_) => return false, - }; - } else { - self.context.active_timer.set(None); - } - true - } else { - false - } + self.activate_current_timer(this_alarm, &suspended_timer) + .unwrap_or(false) }) .await; @@ -525,6 +496,33 @@ let alarm_instant = num_ticks + ticks; Ok(alarm_instant) } + + fn activate_current_timer( + &self, + this_alarm: ActiveTimer, + suspended_timer: &Cell<Option<ActiveTimer>>, + ) -> TockResult<bool> { + let now = get_current_ticks()?; + + if let Some(active) = self.context.active_timer.get() { + if left_is_later(active, this_alarm) { + suspended_timer.set(Some(active)); + self.activate_timer(&this_alarm)?; + } + } else { + self.activate_timer(&this_alarm)?; + } + if is_over(this_alarm, now as u32) { + if let Some(paused) = suspended_timer.get() { + self.activate_timer(&paused)?; + } else { + self.context.active_timer.set(None); + } + Ok(true) + } else { + Ok(false) + } + } } fn get_current_ticks() -> TockResult<usize> {