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();