From f9cef1c48ef7236a2b9ba2ce9fc6c471619723e8 Mon Sep 17 00:00:00 2001 From: khai96_ Date: Wed, 2 Jul 2025 03:01:29 +0700 Subject: [PATCH] perf: reduce kernel memory usage --- src/fs_tree_builder.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/fs_tree_builder.rs b/src/fs_tree_builder.rs index e942a630..483663e0 100644 --- a/src/fs_tree_builder.rs +++ b/src/fs_tree_builder.rs @@ -72,7 +72,7 @@ where path: root, get_info: |path| { - let stats = match symlink_metadata(path) { + let (is_dir, size) = match symlink_metadata(path) { Err(error) => { reporter.report(Event::EncounterError(ErrorReport { operation: SymlinkMetadata, @@ -84,10 +84,16 @@ where children: Vec::new(), }; } - Ok(stats) => stats, + Ok(stats) => { + // `stats` should be dropped ASAP to avoid piling up kernel memory usage + let is_dir = stats.is_dir(); + let size = size_getter.get_size(&stats); + reporter.report(Event::ReceiveData(size)); + (is_dir, size) + } }; - let children: Vec<_> = if stats.is_dir() { + let children: Vec<_> = if is_dir { match read_dir(path) { Err(error) => { reporter.report(Event::EncounterError(ErrorReport { @@ -115,9 +121,6 @@ where Vec::new() }; - let size = size_getter.get_size(&stats); - reporter.report(Event::ReceiveData(size)); - Info { size, children } },