From ca7e567786271de581eee899334b86139768e989 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 7 Feb 2022 08:07:12 +0100 Subject: [PATCH] LanguageClient: cancel running document symbol requests Change-Id: I963d76e1d4ccc264cf20206b33a9de990d472a33 Reviewed-by: Christian Stenger Reviewed-by: --- src/plugins/languageclient/documentsymbolcache.cpp | 8 ++++++++ src/plugins/languageclient/documentsymbolcache.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/plugins/languageclient/documentsymbolcache.cpp b/src/plugins/languageclient/documentsymbolcache.cpp index cb62e438d49..b621b618223 100644 --- a/src/plugins/languageclient/documentsymbolcache.cpp +++ b/src/plugins/languageclient/documentsymbolcache.cpp @@ -40,7 +40,13 @@ DocumentSymbolCache::DocumentSymbolCache(Client *client) { auto connectDocument = [this](Core::IDocument *document) { connect(document, &Core::IDocument::contentsChanged, this, [document, this]() { + const auto uri = DocumentUri::fromFilePath(document->filePath()); m_cache.remove(DocumentUri::fromFilePath(document->filePath())); + auto requestIdIt = m_runningRequests.find(uri); + if (requestIdIt != m_runningRequests.end()) { + m_client->cancelRequest(requestIdIt.value()); + m_runningRequests.erase(requestIdIt); + } }); }; @@ -99,6 +105,7 @@ void DocumentSymbolCache::requestSymbolsImpl() if (self) self->handleResponse(uri, response); }); + m_runningRequests[uri] = request.id(); m_client->sendContent(request); } m_compressedUris.clear(); @@ -107,6 +114,7 @@ void DocumentSymbolCache::requestSymbolsImpl() void DocumentSymbolCache::handleResponse(const DocumentUri &uri, const DocumentSymbolsRequest::Response &response) { + m_runningRequests.remove(uri); if (Utils::optional error = response.error()) { if (m_client) m_client->log(error.value()); diff --git a/src/plugins/languageclient/documentsymbolcache.h b/src/plugins/languageclient/documentsymbolcache.h index ada0953c071..8ae17bbd6df 100644 --- a/src/plugins/languageclient/documentsymbolcache.h +++ b/src/plugins/languageclient/documentsymbolcache.h @@ -60,6 +60,7 @@ private: const LanguageServerProtocol::DocumentSymbolsRequest::Response &response); QMap m_cache; + QMap m_runningRequests; Client *m_client = nullptr; QTimer m_compressionTimer; QSet m_compressedUris;