From 9788567c39b4d95acb6baf7a6372bb04a43eef45 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Tue, 24 Nov 2020 22:22:19 +0100 Subject: [PATCH] Scan files after scanning directories has finished Hopefully this will always be more efficient in terms of disk access patterns. --- src/dwarfs/scanner.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/dwarfs/scanner.cpp b/src/dwarfs/scanner.cpp index 5dfe5017..323a7365 100644 --- a/src/dwarfs/scanner.cpp +++ b/src/dwarfs/scanner.cpp @@ -335,10 +335,6 @@ void scanner_::scan(filesystem_writer& fsw, case entry::E_FILE: prog.files_found++; - wg_.add_job([=, this, &prog] { - pe->scan(*os_, prog); - prog.files_scanned++; - }); break; case entry::E_LINK: @@ -374,6 +370,18 @@ void scanner_::scan(filesystem_writer& fsw, } } + // now scan all files + // TODO: automatically adjust # of worker threads based on load + root->walk([&](entry* ep) { + wg_.add_job([=, this, &prog] { + if (ep->type() == entry::E_FILE) { + prog.current.store(ep); + ep->scan(*os_, prog); + prog.files_scanned++; + } + }); + }); + log_.info() << "waiting for background scanners..."; wg_.wait();