diff --git a/Cargo.lock b/Cargo.lock index eddc2b586cb..fcd36d8f71d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -416,7 +416,7 @@ dependencies = [ [[package]] name = "cargo-util" -version = "0.2.8" +version = "0.2.9" dependencies = [ "anyhow", "core-foundation", diff --git a/crates/cargo-util/Cargo.toml b/crates/cargo-util/Cargo.toml index d4376d05bd0..42d2c373331 100644 --- a/crates/cargo-util/Cargo.toml +++ b/crates/cargo-util/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cargo-util" -version = "0.2.8" +version = "0.2.9" rust-version.workspace = true edition.workspace = true license.workspace = true diff --git a/crates/cargo-util/src/du.rs b/crates/cargo-util/src/du.rs index a4f2cbe8c99..14634c47bc1 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) }