1
Fork 0
mirror of https://github.com/RGBCube/dix synced 2025-07-28 12:17:45 +00:00

src/main.rs: clean up thread handles

This commit is contained in:
Bloxx12 2025-05-04 21:42:35 +02:00
parent 7ff637450d
commit 5b304cd7bb
No known key found for this signature in database

View file

@ -42,29 +42,32 @@ fn main() {
println!(">>> {}", args.path2.to_string_lossy()); println!(">>> {}", args.path2.to_string_lossy());
// handles to the threads collecting closure size information // handles to the threads collecting closure size information
let mut csize_pre_handle = None; // We do this as early as possible because nix is slow.
let mut csize_post_handle = None; let closure_size_handles = if args.closure_size {
let path = args.path.clone();
let path2 = args.path2.clone();
Some((
thread::spawn(move || get_closure_size(&path)),
thread::spawn(move || get_closure_size(&path2)),
))
} else {
None
};
// get closure size in the background to increase performance let package_list_pre = get_packages(&args.path);
if args.closure_size { let package_list_post = get_packages(&args.path2);
let (p1, p2) = (args.path.clone(), args.path2.clone());
csize_pre_handle = Some(thread::spawn(move || get_closure_size(&p1)));
csize_post_handle = Some(thread::spawn(move || get_closure_size(&p2)));
}
let packages = get_packages(&args.path); if let (Ok(package_list_pre), Ok(package_list_post)) = (package_list_pre, package_list_post) {
let packages2 = get_packages(&args.path2);
if let (Ok(packages), Ok(packages2)) = (packages, packages2) {
// Map from packages of the first closure to their version // Map from packages of the first closure to their version
let mut pre = HashMap::<&str, HashSet<&str>>::new(); let mut pre = HashMap::<&str, HashSet<&str>>::new();
for p in &packages { let mut post = HashMap::<&str, HashSet<&str>>::new();
for p in &package_list_pre {
let (name, version) = get_version(&**p); let (name, version) = get_version(&**p);
pre.entry(name).or_default().insert(version); pre.entry(name).or_default().insert(version);
} }
for p in &package_list_post {
let mut post = HashMap::<&str, HashSet<&str>>::new();
for p in &packages2 {
let (name, version) = get_version(&**p); let (name, version) = get_version(&**p);
post.entry(name).or_default().insert(version); post.entry(name).or_default().insert(version);
} }
@ -140,15 +143,14 @@ fn main() {
); );
} }
} }
if args.closure_size { if let Some((pre_handle, post_handle)) = closure_size_handles {
let closure_size_pre = csize_pre_handle.unwrap().join().unwrap() as i64; let pre_size = pre_handle.join().unwrap();
let closure_size_post = csize_post_handle.unwrap().join().unwrap() as i64; let post_size = post_handle.join().unwrap();
println!("{}", "Closure Size:".underline().bold()); println!("{}", "Closure Size:".underline().bold());
println!("Before: {pre_size} MiB");
println!("Before: {} MiB", closure_size_pre); println!("After: {post_size} MiB");
println!("After: {} MiB", closure_size_post); println!("Difference: {} MiB", post_size - pre_size);
println!("Difference: {} MiB", closure_size_post - closure_size_pre);
} }
} }
} }