diff --git a/crates/filemeta/src/metacache.rs b/crates/filemeta/src/metacache.rs index c07de472..8daa9c1a 100644 --- a/crates/filemeta/src/metacache.rs +++ b/crates/filemeta/src/metacache.rs @@ -831,10 +831,16 @@ impl Cache { } } + #[allow(unsafe_code)] async fn update(&self) -> std::io::Result<()> { match (self.update_fn)().await { Ok(val) => { - self.val.store(Box::into_raw(Box::new(val)), AtomicOrdering::SeqCst); + let old = self.val.swap(Box::into_raw(Box::new(val)), AtomicOrdering::SeqCst); + if !old.is_null() { + unsafe { + drop(Box::from_raw(old)); + } + } let now = SystemTime::now() .duration_since(UNIX_EPOCH) .expect("Time went backwards")