mirror of https://github.com/fafhrd91/actix-net
Refactor LocalWaker for use Cell in a future
This commit is contained in:
parent
7afda5cab1
commit
737c57a4c5
|
@ -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`.
|
||||||
|
|
Loading…
Reference in New Issue