mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
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:
parent
6658e1abe3
commit
1d35833e3b
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -416,7 +416,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cargo-util"
|
name = "cargo-util"
|
||||||
version = "0.2.8"
|
version = "0.2.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"core-foundation",
|
"core-foundation",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "cargo-util"
|
name = "cargo-util"
|
||||||
version = "0.2.8"
|
version = "0.2.9"
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
@ -4,7 +4,6 @@ use anyhow::{Context, Result};
|
|||||||
use ignore::overrides::OverrideBuilder;
|
use ignore::overrides::OverrideBuilder;
|
||||||
use ignore::{WalkBuilder, WalkState};
|
use ignore::{WalkBuilder, WalkState};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::sync::atomic::{AtomicU64, Ordering};
|
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
/// Determines the disk usage of all files in the given directory.
|
/// 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_ignore(false)
|
||||||
.git_exclude(false);
|
.git_exclude(false);
|
||||||
let walker = builder.build_parallel();
|
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.
|
// A slot used to indicate there was an error while walking.
|
||||||
//
|
//
|
||||||
// It is possible that more than one error happens (such as in different
|
// 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(entry) => match entry.metadata() {
|
||||||
Ok(meta) => {
|
Ok(meta) => {
|
||||||
if meta.is_file() {
|
if meta.is_file() {
|
||||||
total.fetch_add(meta.len(), Ordering::SeqCst);
|
let mut lock = total.lock().unwrap();
|
||||||
|
*lock += meta.len();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
@ -73,5 +73,6 @@ fn du_inner(path: &Path, patterns: &[&str]) -> Result<u64> {
|
|||||||
return Err(e);
|
return Err(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(total.load(Ordering::SeqCst))
|
let total = *total.lock().unwrap();
|
||||||
|
Ok(total)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user