From 924c1fdafdb1250fa2e3764f531e96af1e07085d Mon Sep 17 00:00:00 2001 From: Lukas Markeffsky <@> Date: Thu, 1 Feb 2024 10:29:27 +0000 Subject: [PATCH] set state before reclaim shim --- src/lib.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 5ec943a..4fc1191 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 { -- GitLab