mirror of
https://github.com/fafhrd91/actix-net
synced 2025-03-20 16:05:18 +01:00
Refactor LocalWaker for use Cell and remove deprecated methods (#278)
This commit is contained in:
parent
cb07ead392
commit
2cfe1d88ad
@ -1,4 +1,4 @@
|
|||||||
use core::cell::UnsafeCell;
|
use core::cell::Cell;
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
use core::task::Waker;
|
use core::task::Waker;
|
||||||
@ -19,10 +19,9 @@ use core::task::Waker;
|
|||||||
///
|
///
|
||||||
/// 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: Cell<Option<Waker>>,
|
||||||
// mark LocalWaker as a !Send type.
|
// mark LocalWaker as a !Send type.
|
||||||
_t: PhantomData<*const ()>,
|
_t: PhantomData<*const ()>,
|
||||||
}
|
}
|
||||||
@ -31,31 +30,18 @@ impl LocalWaker {
|
|||||||
/// Create an `LocalWaker`.
|
/// Create an `LocalWaker`.
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
LocalWaker {
|
LocalWaker {
|
||||||
waker: UnsafeCell::new(None),
|
waker: Cell::new(None),
|
||||||
_t: PhantomData,
|
_t: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[deprecated(
|
|
||||||
since = "2.1.0",
|
|
||||||
note = "In favor of `wake`. State of the register doesn't matter at `wake` up"
|
|
||||||
)]
|
|
||||||
/// Check if waker has been registered.
|
|
||||||
#[inline]
|
|
||||||
pub fn is_registered(&self) -> bool {
|
|
||||||
unsafe { (*self.waker.get()).is_some() }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Registers the waker to be notified on calls to `wake`.
|
/// Registers the waker to be notified on calls to `wake`.
|
||||||
///
|
///
|
||||||
/// Returns `true` if waker was registered before.
|
/// Returns `true` if waker was registered before.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn register(&self, waker: &Waker) -> bool {
|
pub fn register(&self, waker: &Waker) -> bool {
|
||||||
unsafe {
|
let last_waker = self.waker.replace(Some(waker.clone()));
|
||||||
let w = self.waker.get();
|
last_waker.is_some()
|
||||||
let last_waker = w.replace(Some(waker.clone()));
|
|
||||||
last_waker.is_some()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Calls `wake` on the last `Waker` passed to `register`.
|
/// Calls `wake` on the last `Waker` passed to `register`.
|
||||||
@ -73,7 +59,7 @@ impl LocalWaker {
|
|||||||
/// If a waker has not been registered, this returns `None`.
|
/// If a waker has not been registered, this returns `None`.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn take(&self) -> Option<Waker> {
|
pub fn take(&self) -> Option<Waker> {
|
||||||
unsafe { (*self.waker.get()).take() }
|
self.waker.take()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user