Skip to content

Commit

Permalink
Switch from AtomicU64 to Mutex.
Browse files Browse the repository at this point in the history
Not all platforms support AtomicU64, so this swaps the usage with
Mutex. The difference in performance should be imperceptible.
  • Loading branch information
ehuss committed Nov 15, 2023
1 parent 6658e1a commit 89c8b64
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions crates/cargo-util/src/du.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand All @@ -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) => {
Expand All @@ -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)
}

0 comments on commit 89c8b64

Please sign in to comment.