From f398497cd2bae853ff8a26e509dbcca9182d82bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Tue, 9 May 2023 07:39:52 +0200 Subject: [PATCH] Do not increment in threads values every time when finding file/folder(works quite good, may works bad with folders with ~several thousands of files) --- czkawka_core/src/common_dir_traversal.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/czkawka_core/src/common_dir_traversal.rs b/czkawka_core/src/common_dir_traversal.rs index 9f5052b..6567ac8 100644 --- a/czkawka_core/src/common_dir_traversal.rs +++ b/czkawka_core/src/common_dir_traversal.rs @@ -399,6 +399,7 @@ where return (dir_result, warnings, fe_result, set_as_not_empty_folder_list, folder_entries_list); }; + let mut counter = 0; // Check every sub folder/file/link etc. 'dir: for entry in read_dir { let Some((entry_data, metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else { @@ -410,7 +411,7 @@ where process_dir_in_file_symlink_mode(recursive_search, current_folder, entry_data, &directories, &mut dir_result, &mut warnings, &excluded_items); } (EntryType::Dir, Collect::EmptyFolders) => { - atomic_counter.fetch_add(1, Ordering::Relaxed); + counter += 1; process_dir_in_dir_mode( &metadata, current_folder, @@ -424,7 +425,7 @@ where ); } (EntryType::File, Collect::Files) => { - atomic_counter.fetch_add(1, Ordering::Relaxed); + counter += 1; process_file_in_file_mode( &metadata, entry_data, @@ -451,10 +452,10 @@ where set_as_not_empty_folder_list.push(current_folder.clone()); } (EntryType::File, Collect::InvalidSymlinks) => { - atomic_counter.fetch_add(1, Ordering::Relaxed); + counter += 1; } (EntryType::Symlink, Collect::InvalidSymlinks) => { - atomic_counter.fetch_add(1, Ordering::Relaxed); + counter += 1; process_symlink_in_symlink_mode( &metadata, entry_data, @@ -471,6 +472,10 @@ where } } } + if counter > 0 { + // Do not increase counter one by one in threads, because usually it + atomic_counter.fetch_add(counter, Ordering::Relaxed); + } (dir_result, warnings, fe_result, set_as_not_empty_folder_list, folder_entries_list) }) .collect();