ilya-biryukov added inline comments.
================ Comment at: clangd/TUScheduler.cpp:220 + + GCThread.cleanupFile(std::move(Data->Worker)); } ---------------- sammccall wrote: > in the spirit of "just spawn a thread, and write direct code"... > > can we just spawn a shared_ptr<std::thread> to do the work here, and replace > GCThread with a vector<weak_ptr<std::thread>>. > Then ~TUScheduler could just loop through: > > for (const auto &WeakThread : Cleanups) > if (auto SharedThread = WeakThread.lock()) // thread may have died already > SharedThread->join(); > > might be simpler? You need to lock the Cleanups vector, but no fiddling with > CVs etc. The problem is that stored vector will have unbounded growth, and I think it shouldn't. What we could do instead, though, is to have a counter that increments with each spawned request and wait for it to go down to 0 when TUScheduler dies. That should be simpler than what we have now and we have vectors that can grow indefinitely. Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D42573 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits