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