diff --git a/src/async_utils.rs b/src/async_utils.rs index 83517bb..d4443a5 100644 --- a/src/async_utils.rs +++ b/src/async_utils.rs @@ -36,26 +36,20 @@ impl Future for TimerFuture { type Output = (); fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { let mut state = self.state.lock().unwrap(); - if matches!(*state, State::Completed) { - return Poll::Ready(()); - } - - if let State::NotStarted(duration) = *state { - let thread_state = self.state.clone(); - thread::spawn(move || { - thread::sleep(duration); - let mut state = thread_state.lock().unwrap(); - let waker = if let State::Running(waker) = &*state { - Some(waker.clone()) - } else { - None - }; - *state = State::Completed; - if let Some(w) = waker { - w.wake(); - } - }); - } + match *state { + State::Completed => return Poll::Ready(()), + State::NotStarted(duration) => { + let thread_state = self.state.clone(); + thread::spawn(move || { + thread::sleep(duration); + let mut state = thread_state.lock().unwrap(); + if let State::Running(waker) = std::mem::replace(&mut *state, State::Completed) { + waker.wake(); + }; + }); + } + State::Running(_) => {} + }; *state = State::Running(cx.waker().clone()); Poll::Pending diff --git a/src/setup/setup.rs b/src/setup/setup.rs index 1b888f4..6e0268c 100644 --- a/src/setup/setup.rs +++ b/src/setup/setup.rs @@ -68,8 +68,7 @@ impl resources.insert(storable_resource, future.clone()); drop(resources); trace!(logger, "Resource already added"); - let (t, did_run) = future.await; - Ok((t, did_run)) + Ok(future.await) } else { let inner_weak = Rc::downgrade(&self.0); let logger_weak = Rc::downgrade(logger);