18
18
#include " llvm/Support/JSON.h"
19
19
#include " llvm/Support/Program.h"
20
20
#include " llvm/Support/Signals.h"
21
+ #include " llvm/Support/ThreadPool.h"
21
22
#include " llvm/Support/Threading.h"
22
23
#include < mutex>
23
24
#include < thread>
@@ -490,6 +491,7 @@ int main(int argc, const char **argv) {
490
491
#else
491
492
unsigned NumWorkers = 1 ;
492
493
#endif
494
+ llvm::ThreadPool Pool (NumWorkers);
493
495
std::vector<std::unique_ptr<DependencyScanningTool>> WorkerTools;
494
496
for (unsigned I = 0 ; I < NumWorkers; ++I)
495
497
WorkerTools.push_back (std::make_unique<DependencyScanningTool>(Service));
@@ -499,7 +501,6 @@ int main(int argc, const char **argv) {
499
501
AdjustingCompilations->getAllCompileCommands ())
500
502
Inputs.emplace_back (Cmd);
501
503
502
- std::vector<std::thread> WorkerThreads;
503
504
std::atomic<bool > HadErrors (false );
504
505
FullDeps FD;
505
506
std::mutex Lock;
@@ -510,8 +511,8 @@ int main(int argc, const char **argv) {
510
511
<< " files using " << NumWorkers << " workers\n " ;
511
512
}
512
513
for (unsigned I = 0 ; I < NumWorkers; ++I) {
513
- auto Worker = [I, &Lock, &Index, &Inputs, &HadErrors, &FD, &WorkerTools,
514
- &DependencyOS, &Errs]() {
514
+ Pool. async ( [I, &Lock, &Index, &Inputs, &HadErrors, &FD, &WorkerTools,
515
+ &DependencyOS, &Errs]() {
515
516
llvm::StringSet<> AlreadySeenModules;
516
517
while (true ) {
517
518
const SingleCommandCompilationDatabase *Input;
@@ -543,16 +544,9 @@ int main(int argc, const char **argv) {
543
544
HadErrors = true ;
544
545
}
545
546
}
546
- };
547
- #if LLVM_ENABLE_THREADS
548
- WorkerThreads.emplace_back (std::move (Worker));
549
- #else
550
- // Run the worker without spawning a thread when threads are disabled.
551
- Worker ();
552
- #endif
547
+ });
553
548
}
554
- for (auto &W : WorkerThreads)
555
- W.join ();
549
+ Pool.wait ();
556
550
557
551
if (Format == ScanningOutputFormat::Full)
558
552
FD.printFullOutput (llvm::outs ());
0 commit comments