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

Reply via email to