From 3f773cb1e5f2885c420702bc8533a950a78bd229 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 4 Feb 2021 11:31:26 +0100 Subject: [PATCH] LanguageClient: avoid sending message to server shutting down Send the workspace change method before the server gets shut down. Prevents an assert in Client::sendContent. Change-Id: Iaedc9829379d987aa6f91a87e26d35b64a9f0f55 Reviewed-by: Christian Stenger --- src/plugins/languageclient/client.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 795f67fe050..7d1c657ca86 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -790,6 +790,15 @@ void Client::projectOpened(ProjectExplorer::Project *project) void Client::projectClosed(ProjectExplorer::Project *project) { + if (sendWorkspceFolderChanges()) { + WorkspaceFoldersChangeEvent event; + event.setRemoved({WorkSpaceFolder(DocumentUri::fromFilePath(project->projectDirectory()), + project->displayName())}); + DidChangeWorkspaceFoldersParams params; + params.setEvent(event); + DidChangeWorkspaceFoldersNotification change(params); + sendContent(change); + } if (project == m_project) { if (m_state == Initialized) { shutdown(); @@ -798,15 +807,6 @@ void Client::projectClosed(ProjectExplorer::Project *project) emit finished(); } } - if (!sendWorkspceFolderChanges()) - return; - WorkspaceFoldersChangeEvent event; - event.setRemoved({WorkSpaceFolder(DocumentUri::fromFilePath(project->projectDirectory()), - project->displayName())}); - DidChangeWorkspaceFoldersParams params; - params.setEvent(event); - DidChangeWorkspaceFoldersNotification change(params); - sendContent(change); } void Client::setSupportedLanguage(const LanguageFilter &filter) @@ -1260,6 +1260,8 @@ void Client::shutDownCallback(const ShutdownRequest::Response &shutdownResponse) bool Client::sendWorkspceFolderChanges() const { + if (!reachable()) + return false; if (m_dynamicCapabilities.isRegistered( DidChangeWorkspaceFoldersNotification::methodName).value_or(false)) { return true;