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 {