Refactor LocalWaker for use Cell in a future

This commit is contained in:
Juan Aguilar Santillana 2020-12-13 03:14:44 +01:00
parent 7afda5cab1
commit 737c57a4c5
1 changed files with 8 additions and 3 deletions

View File

@ -19,6 +19,7 @@ use std::{fmt, rc};
/// ///
/// A single `AtomicWaker` may be reused for any number of calls to `register` or /// A single `AtomicWaker` may be reused for any number of calls to `register` or
/// `wake`. /// `wake`.
// TODO: Refactor to Cell when remove deprecated methods (@botika)
#[derive(Default)] #[derive(Default)]
pub struct LocalWaker { pub struct LocalWaker {
pub(crate) waker: UnsafeCell<Option<Waker>>, pub(crate) waker: UnsafeCell<Option<Waker>>,
@ -34,6 +35,10 @@ impl LocalWaker {
} }
} }
#[deprecated(
since = "2.x.x",
note = "In favor of `wake`. State of the register doesn't matter at `wake` up"
)]
#[inline] #[inline]
/// Check if waker has been registered. /// Check if waker has been registered.
pub fn is_registered(&self) -> bool { pub fn is_registered(&self) -> bool {
@ -47,9 +52,8 @@ impl LocalWaker {
pub fn register(&self, waker: &Waker) -> bool { pub fn register(&self, waker: &Waker) -> bool {
unsafe { unsafe {
let w = self.waker.get(); let w = self.waker.get();
let is_registered = (*w).is_some(); let last_waker = w.replace(Some(waker.clone()));
*w = Some(waker.clone()); last_waker.is_some()
is_registered
} }
} }
@ -63,6 +67,7 @@ impl LocalWaker {
} }
} }
#[inline]
/// Returns the last `Waker` passed to `register`, so that the user can wake it. /// Returns the last `Waker` passed to `register`, so that the user can wake it.
/// ///
/// If a waker has not been registered, this returns `None`. /// If a waker has not been registered, this returns `None`.