Switch from AtomicU64 to Mutex.

Not all platforms support AtomicU64, so this swaps the usage with
Mutex. The difference in performance should be imperceptible.
This commit is contained in:
Eric Huss 2023-11-15 13:45:06 -08:00
parent 6658e1abe3
commit 1d35833e3b
3 changed files with 7 additions and 6 deletions

2
Cargo.lock generated
View File

@ -416,7 +416,7 @@ dependencies = [
[[package]]
name = "cargo-util"
version = "0.2.8"
version = "0.2.9"
dependencies = [
"anyhow",
"core-foundation",

View File

@ -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

View File

@ -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<u64> {
.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<u64> {
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<u64> {
return Err(e);
}
Ok(total.load(Ordering::SeqCst))
let total = *total.lock().unwrap();
Ok(total)
}