diff --git a/ostd/src/sync/rcu/non_null/mod.rs b/ostd/src/sync/rcu/non_null/mod.rs index e04c7fb1b..04e4e1aa5 100644 --- a/ostd/src/sync/rcu/non_null/mod.rs +++ b/ostd/src/sync/rcu/non_null/mod.rs @@ -5,7 +5,6 @@ mod either; -use alloc::sync::Weak; use core::{marker::PhantomData, mem::ManuallyDrop, ops::Deref, ptr::NonNull}; use crate::prelude::*; @@ -202,59 +201,3 @@ unsafe impl NonNullPtr for Arc { NonNullPtr::into_raw(ManuallyDrop::into_inner(ptr_ref.inner)) } } - -/// A type that represents `&'a Weak`. -#[derive(Debug)] -pub struct WeakRef<'a, T> { - inner: ManuallyDrop>, - _marker: PhantomData<&'a Weak>, -} - -impl Deref for WeakRef<'_, T> { - type Target = Weak; - - fn deref(&self) -> &Self::Target { - &self.inner - } -} - -unsafe impl NonNullPtr for Weak { - type Target = T; - - type Ref<'a> - = WeakRef<'a, T> - where - Self: 'a; - - // The alignment of `Weak` is 1 instead of `align_of::()`. - // This is because `Weak::new()` uses a dangling pointer that is _not_ aligned. - const ALIGN_BITS: u32 = 0; - - fn into_raw(self) -> NonNull { - let ptr = Weak::into_raw(self).cast_mut(); - - // SAFETY: The pointer representing an `Weak` can never be NULL. - unsafe { NonNull::new_unchecked(ptr) } - } - - unsafe fn from_raw(ptr: NonNull) -> Self { - let ptr = ptr.as_ptr().cast_const(); - - // SAFETY: The safety is upheld by the caller. - unsafe { Weak::from_raw(ptr) } - } - - unsafe fn raw_as_ref<'a>(raw: NonNull) -> Self::Ref<'a> { - // SAFETY: The safety is upheld by the caller. - unsafe { - WeakRef { - inner: ManuallyDrop::new(Weak::from_raw(raw.as_ptr())), - _marker: PhantomData, - } - } - } - - fn ref_as_raw(ptr_ref: Self::Ref<'_>) -> NonNull { - NonNullPtr::into_raw(ManuallyDrop::into_inner(ptr_ref.inner)) - } -}