diff options
Diffstat (limited to 'clang-tools-extra/clangd/Threading.cpp')
-rw-r--r-- | clang-tools-extra/clangd/Threading.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/clang-tools-extra/clangd/Threading.cpp b/clang-tools-extra/clangd/Threading.cpp index 016a90297c3..0a605719fce 100644 --- a/clang-tools-extra/clangd/Threading.cpp +++ b/clang-tools-extra/clangd/Threading.cpp @@ -1,5 +1,6 @@ #include "Threading.h" #include "Trace.h" +#include "clang/Basic/Stack.h" #include "llvm/ADT/ScopeExit.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/Threading.h" @@ -84,16 +85,16 @@ void AsyncTaskRunner::runAsync(const llvm::Twine &Name, } }); - std::thread( - [](std::string Name, decltype(Action) Action, decltype(CleanupTask)) { - llvm::set_thread_name(Name); - Action(); - // Make sure function stored by Action is destroyed before CleanupTask - // is run. - Action = nullptr; - }, - Name.str(), std::move(Action), std::move(CleanupTask)) - .detach(); + auto Task = [Name = Name.str(), Action = std::move(Action), + Cleanup = std::move(CleanupTask)]() mutable { + llvm::set_thread_name(Name); + Action(); + // Make sure function stored by ThreadFunc is destroyed before Cleanup runs. + Action = nullptr; + }; + + // Ensure our worker threads have big enough stacks to run clang. + llvm::llvm_execute_on_thread_async(std::move(Task), clang::DesiredStackSize); } Deadline timeoutSeconds(llvm::Optional<double> Seconds) { |