From 89c8b6449776de064799b94f39e83290d77a566e Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Wed, 15 Nov 2023 13:45:06 -0800 Subject: [PATCH] Switch from AtomicU64 to Mutex. Not all platforms support AtomicU64, so this swaps the usage with Mutex. The difference in performance should be imperceptible. --- crates/cargo-util/src/du.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/cargo-util/src/du.rs b/crates/cargo-util/src/du.rs index a4f2cbe8c993..14634c47bc1b 100644 --- a/crates/cargo-util/src/du.rs +++ b/crates/cargo-util/src/du.rs @@ -4,7 +4,6 @@ use anyhow::{Context, Result}; use ignore::overrides::OverrideBuilder; use ignore::{WalkBuilder, WalkState}; use std::path::Path; -use std::sync::atomic::{AtomicU64, Ordering}; use std::sync::{Arc, Mutex}; /// Determines the disk usage of all files in the given directory. @@ -40,7 +39,7 @@ fn du_inner(path: &Path, patterns: &[&str]) -> Result { .git_ignore(false) .git_exclude(false); let walker = builder.build_parallel(); - let total = Arc::new(AtomicU64::new(0)); + let total = Arc::new(Mutex::new(0u64)); // A slot used to indicate there was an error while walking. // // It is possible that more than one error happens (such as in different @@ -52,7 +51,8 @@ fn du_inner(path: &Path, patterns: &[&str]) -> Result { Ok(entry) => match entry.metadata() { Ok(meta) => { if meta.is_file() { - total.fetch_add(meta.len(), Ordering::SeqCst); + let mut lock = total.lock().unwrap(); + *lock += meta.len(); } } Err(e) => { @@ -73,5 +73,6 @@ fn du_inner(path: &Path, patterns: &[&str]) -> Result { return Err(e); } - Ok(total.load(Ordering::SeqCst)) + let total = *total.lock().unwrap(); + Ok(total) }