[PATCH] D94603: [clangd] Allow CDBs to have background work to block on.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 20 02:11:48 PST 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG536a1b0ea211: [clangd] Allow CDBs to have background work to block on. (authored by sammccall).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D94603/new/
https://reviews.llvm.org/D94603
Files:
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/clangd/ClangdServer.h
clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
clang-tools-extra/clangd/GlobalCompilationDatabase.h
Index: clang-tools-extra/clangd/GlobalCompilationDatabase.h
===================================================================
--- clang-tools-extra/clangd/GlobalCompilationDatabase.h
+++ clang-tools-extra/clangd/GlobalCompilationDatabase.h
@@ -51,6 +51,10 @@
/// Clangd should treat the results as unreliable.
virtual tooling::CompileCommand getFallbackCommand(PathRef File) const;
+ /// If the CDB does any asynchronous work, wait for it to complete.
+ /// For use in tests.
+ virtual bool blockUntilIdle(Deadline D) const { return true; }
+
using CommandChanged = Event<std::vector<std::string>>;
/// The callback is notified when files may have new compile commands.
/// The argument is a list of full file paths.
@@ -75,6 +79,8 @@
tooling::CompileCommand getFallbackCommand(PathRef File) const override;
+ bool blockUntilIdle(Deadline D) const override;
+
private:
const GlobalCompilationDatabase *Base;
std::unique_ptr<GlobalCompilationDatabase> BaseOwner;
Index: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
===================================================================
--- clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
+++ clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
@@ -636,5 +636,11 @@
return Base->getFallbackCommand(File);
}
+bool DelegatingCDB::blockUntilIdle(Deadline D) const {
+ if (!Base)
+ return true;
+ return Base->blockUntilIdle(D);
+}
+
} // namespace clangd
} // namespace clang
Index: clang-tools-extra/clangd/ClangdServer.h
===================================================================
--- clang-tools-extra/clangd/ClangdServer.h
+++ clang-tools-extra/clangd/ClangdServer.h
@@ -362,6 +362,7 @@
Context createProcessingContext(PathRef) const;
config::Provider *ConfigProvider = nullptr;
+ const GlobalCompilationDatabase &CDB;
const ThreadsafeFS &TFS;
Callbacks *ServerCallbacks = nullptr;
mutable std::mutex ConfigDiagnosticsMu;
Index: clang-tools-extra/clangd/ClangdServer.cpp
===================================================================
--- clang-tools-extra/clangd/ClangdServer.cpp
+++ clang-tools-extra/clangd/ClangdServer.cpp
@@ -139,7 +139,8 @@
ClangdServer::ClangdServer(const GlobalCompilationDatabase &CDB,
const ThreadsafeFS &TFS, const Options &Opts,
Callbacks *Callbacks)
- : ConfigProvider(Opts.ConfigProvider), TFS(TFS), ServerCallbacks(Callbacks),
+ : ConfigProvider(Opts.ConfigProvider), CDB(CDB), TFS(TFS),
+ ServerCallbacks(Callbacks),
DynamicIdx(Opts.BuildDynamicSymbolIndex
? new FileIndex(Opts.HeavyweightDynamicSymbolIndex,
Opts.CollectMainFileRefs)
@@ -870,6 +871,7 @@
LLVM_NODISCARD bool
ClangdServer::blockUntilIdleForTest(llvm::Optional<double> TimeoutSeconds) {
return WorkScheduler.blockUntilIdle(timeoutSeconds(TimeoutSeconds)) &&
+ CDB.blockUntilIdle(timeoutSeconds(TimeoutSeconds)) &&
(!BackgroundIdx ||
BackgroundIdx->blockUntilIdleForTest(TimeoutSeconds));
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D94603.317811.patch
Type: text/x-patch
Size: 3104 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210120/e9771f4a/attachment.bin>
More information about the cfe-commits
mailing list