From da3a85efe5a03572ebcfafa4ef4cfb3e66a8b6e7 Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Tue, 19 Aug 2025 17:50:04 -0400 Subject: [PATCH] Only drop OnceLock value if initialized --- common/std-shims/src/sync.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/common/std-shims/src/sync.rs b/common/std-shims/src/sync.rs index 65313b5c..6fe8e80d 100644 --- a/common/std-shims/src/sync.rs +++ b/common/std-shims/src/sync.rs @@ -48,7 +48,7 @@ mod std_oncelock { Self { value: Cell::new(core::ptr::null_mut()), init: RwLock::new(false) } } /// Shim for `std::sync::OnceLock::get_or_init`. - pub fn get_or_init(&'a self, f: F) -> &'a T + pub fn get_or_init(&self, f: F) -> &T where F: FnOnce() -> T, { @@ -72,7 +72,9 @@ mod std_oncelock { // multiple times impl Drop for OnceLock { fn drop(&mut self) { - unsafe { drop(Box::from_raw(self.value.get())) } + if *self.init.read().unwrap() { + unsafe { drop(Box::from_raw(self.value.get())) } + } } } }