diff --git a/src/lib.rs b/src/lib.rs index 5ec943a492afd772d6fe4bc8430526573ac64817..4fc1191738482d8ae15d5118612e344b13c1a40a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,11 +14,6 @@ pub trait Reclaim: Sized { unsafe fn reclaim_shim<T: Reclaim>(erased_ptr: NonNull<Root<Erased>>) { let ptr = erased_ptr.cast::<Root<T>>(); - unsafe { - debug_assert_eq!((*ptr.as_ptr()).state.get(), STATE_SHARED_INIT); - (*ptr.as_ptr()).state.set(STATE_UNCLAIMED); - }; - let value = unsafe { ptr::addr_of!((*(*ptr.as_ptr()).target.as_ptr()).value).read() }; let unclaimed = Unclaimed { ptr }; @@ -179,6 +174,7 @@ impl<T: ?Sized> Drop for Xrc<T> { state_ref.set(state - 1); return; } + state_ref.set(STATE_UNCLAIMED); let reclaim_shim = unsafe { (*root.as_ptr()).reclaim_shim }; unsafe {