aboutsummaryrefslogtreecommitdiff
path: root/src/waker_ref.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/waker_ref.rs')
-rw-r--r--src/waker_ref.rs25
1 files changed, 9 insertions, 16 deletions
diff --git a/src/waker_ref.rs b/src/waker_ref.rs
index 76d849a..7fb552f 100644
--- a/src/waker_ref.rs
+++ b/src/waker_ref.rs
@@ -1,10 +1,10 @@
-use super::arc_wake::{ArcWake};
+use super::arc_wake::ArcWake;
use super::waker::waker_vtable;
use alloc::sync::Arc;
-use core::mem::ManuallyDrop;
use core::marker::PhantomData;
+use core::mem::ManuallyDrop;
use core::ops::Deref;
-use core::task::{Waker, RawWaker};
+use core::task::{RawWaker, Waker};
/// A [`Waker`] that is only valid for a given lifetime.
///
@@ -22,10 +22,7 @@ impl<'a> WakerRef<'a> {
// copy the underlying (raw) waker without calling a clone,
// as we won't call Waker::drop either.
let waker = ManuallyDrop::new(unsafe { core::ptr::read(waker) });
- Self {
- waker,
- _marker: PhantomData,
- }
+ Self { waker, _marker: PhantomData }
}
/// Create a new [`WakerRef`] from a [`Waker`] that must not be dropped.
@@ -35,10 +32,7 @@ impl<'a> WakerRef<'a> {
/// by the caller), and the [`Waker`] doesn't need to or must not be
/// destroyed.
pub fn new_unowned(waker: ManuallyDrop<Waker>) -> Self {
- Self {
- waker,
- _marker: PhantomData,
- }
+ Self { waker, _marker: PhantomData }
}
}
@@ -57,14 +51,13 @@ impl Deref for WakerRef<'_> {
#[inline]
pub fn waker_ref<W>(wake: &Arc<W>) -> WakerRef<'_>
where
- W: ArcWake
+ W: ArcWake,
{
// simply copy the pointer instead of using Arc::into_raw,
// as we don't actually keep a refcount by using ManuallyDrop.<
- let ptr = (&**wake as *const W) as *const ();
+ let ptr = Arc::as_ptr(wake).cast::<()>();
- let waker = ManuallyDrop::new(unsafe {
- Waker::from_raw(RawWaker::new(ptr, waker_vtable::<W>()))
- });
+ let waker =
+ ManuallyDrop::new(unsafe { Waker::from_raw(RawWaker::new(ptr, waker_vtable::<W>())) });
WakerRef::new_unowned(waker)
}