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 {}