[clangd] Propogate context in TUScheduler::run

Reviewers: sammccall

Subscribers: ilya-biryukov, javed.absar, MaskRay, jkorous, arphaman, usaxena95, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D69328
This commit is contained in:
Kadir Cetinkaya 2019-10-23 10:18:09 +02:00
parent 977205b595
commit 10c8dbcb84
2 changed files with 15 additions and 1 deletions

View File

@ -44,6 +44,7 @@
#include "TUScheduler.h"
#include "Cancellation.h"
#include "Compiler.h"
#include "Context.h"
#include "Diagnostics.h"
#include "GlobalCompilationDatabase.h"
#include "Logger.h"
@ -919,7 +920,11 @@ void TUScheduler::run(llvm::StringRef Name,
llvm::unique_function<void()> Action) {
if (!PreambleTasks)
return Action();
PreambleTasks->runAsync(Name, std::move(Action));
PreambleTasks->runAsync(Name, [Ctx = Context::current().clone(),
Action = std::move(Action)]() mutable {
WithContext WC(std::move(Ctx));
Action();
});
}
void TUScheduler::runWithAST(

View File

@ -688,6 +688,15 @@ TEST_F(TUSchedulerTests, Run) {
S.run("add 2", [&] { Counter += 2; });
ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
EXPECT_EQ(Counter.load(), 3);
Notification TaskRun;
Key<int> TestKey;
WithContextValue CtxWithKey(TestKey, 10);
S.run("props context", [&] {
EXPECT_EQ(Context::current().getExisting(TestKey), 10);
TaskRun.notify();
});
TaskRun.wait();
}
TEST_F(TUSchedulerTests, TUStatus) {