From ef1d29280894cdffcd9013970713a52a1a079e02 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Mon, 14 Jul 2025 19:54:01 +0900 Subject: [PATCH] Impl Drop for PyAtomicRef --- vm/src/object/ext.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/vm/src/object/ext.rs b/vm/src/object/ext.rs index 2815d2b20e7..1e2b78d9a9e 100644 --- a/vm/src/object/ext.rs +++ b/vm/src/object/ext.rs @@ -245,6 +245,19 @@ pub struct PyAtomicRef { _phantom: PhantomData, } +impl Drop for PyAtomicRef { + fn drop(&mut self) { + // SAFETY: We are dropping the atomic reference, so we can safely + // release the pointer. + unsafe { + let ptr = Radium::swap(&self.inner, null_mut(), Ordering::Relaxed); + if let Some(ptr) = NonNull::::new(ptr.cast()) { + let _: PyObjectRef = PyObjectRef::from_raw(ptr); + } + } + } +} + cfg_if::cfg_if! { if #[cfg(feature = "threading")] { unsafe impl Send for PyAtomicRef {}