From e8fe9731fde03de3a4b4da2d61f3e6c32a417359 Mon Sep 17 00:00:00 2001 From: sunfkny <30853461+sunfkny@users.noreply.github.com> Date: Mon, 15 Dec 2025 10:04:14 +0800 Subject: [PATCH] Fix memory leak in Cache update method (#1143) --- crates/filemeta/src/metacache.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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")