ilya-biryukov created this revision. ilya-biryukov added a reviewer: kadircet. Herald added subscribers: jfb, arphaman, jkorous, MaskRay. Herald added a project: clang.
To unify the way we create threads in clangd. This should simplify landing D50993 <https://reviews.llvm.org/D50993>. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D61724 Files: clang-tools-extra/clangd/index/Background.cpp clang-tools-extra/clangd/index/Background.h Index: clang-tools-extra/clangd/index/Background.h =================================================================== --- clang-tools-extra/clangd/index/Background.h +++ clang-tools-extra/clangd/index/Background.h @@ -146,7 +146,7 @@ std::condition_variable QueueCV; bool ShouldStop = false; std::deque<std::pair<Task, llvm::ThreadPriority>> Queue; - std::vector<std::thread> ThreadPool; // FIXME: Abstract this away. + AsyncTaskRunner ThreadPool; GlobalCompilationDatabase::CommandChanged::Subscription CommandsChanged; }; Index: clang-tools-extra/clangd/index/Background.cpp =================================================================== --- clang-tools-extra/clangd/index/Background.cpp +++ clang-tools-extra/clangd/index/Background.cpp @@ -148,19 +148,20 @@ })) { assert(ThreadPoolSize > 0 && "Thread pool size can't be zero."); assert(this->IndexStorageFactory && "Storage factory can not be null!"); - while (ThreadPoolSize--) - ThreadPool.emplace_back([this] { run(); }); + for (unsigned I = 1; I <= ThreadPoolSize; ++I) { + ThreadPool.runAsync("background-worker-" + llvm::Twine(I), + [this] { run(); }); + } if (BuildIndexPeriodMs > 0) { log("BackgroundIndex: build symbol index periodically every {0} ms.", BuildIndexPeriodMs); - ThreadPool.emplace_back([this] { buildIndex(); }); + ThreadPool.runAsync("background-index-builder", [this] { buildIndex(); }); } } BackgroundIndex::~BackgroundIndex() { stop(); - for (auto &Thread : ThreadPool) - Thread.join(); + ThreadPool.wait(); } void BackgroundIndex::stop() {
Index: clang-tools-extra/clangd/index/Background.h =================================================================== --- clang-tools-extra/clangd/index/Background.h +++ clang-tools-extra/clangd/index/Background.h @@ -146,7 +146,7 @@ std::condition_variable QueueCV; bool ShouldStop = false; std::deque<std::pair<Task, llvm::ThreadPriority>> Queue; - std::vector<std::thread> ThreadPool; // FIXME: Abstract this away. + AsyncTaskRunner ThreadPool; GlobalCompilationDatabase::CommandChanged::Subscription CommandsChanged; }; Index: clang-tools-extra/clangd/index/Background.cpp =================================================================== --- clang-tools-extra/clangd/index/Background.cpp +++ clang-tools-extra/clangd/index/Background.cpp @@ -148,19 +148,20 @@ })) { assert(ThreadPoolSize > 0 && "Thread pool size can't be zero."); assert(this->IndexStorageFactory && "Storage factory can not be null!"); - while (ThreadPoolSize--) - ThreadPool.emplace_back([this] { run(); }); + for (unsigned I = 1; I <= ThreadPoolSize; ++I) { + ThreadPool.runAsync("background-worker-" + llvm::Twine(I), + [this] { run(); }); + } if (BuildIndexPeriodMs > 0) { log("BackgroundIndex: build symbol index periodically every {0} ms.", BuildIndexPeriodMs); - ThreadPool.emplace_back([this] { buildIndex(); }); + ThreadPool.runAsync("background-index-builder", [this] { buildIndex(); }); } } BackgroundIndex::~BackgroundIndex() { stop(); - for (auto &Thread : ThreadPool) - Thread.join(); + ThreadPool.wait(); } void BackgroundIndex::stop() {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits