From 8625bbfe5a7cd9de4139a5d80f3479386c8594bd Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 25 Feb 2020 13:30:20 +0100 Subject: LanguageClient: Fix client restart after crash Do not clear open documents but disconnect and deactivate them, so they can be correctly reopened once the server is restarted. Change-Id: I0f61a5461c020865e61d9808e8c645ea842f64ad Fixes: QTCREATORBUG-23648 Reviewed-by: Christian Stenger --- src/plugins/languageclient/client.cpp | 3 ++- src/plugins/languageclient/languageclientmanager.cpp | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index a704889fe6..74e0e91db3 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -808,11 +808,12 @@ bool Client::reset() m_responseHandlers.clear(); m_clientInterface->resetBuffer(); updateEditorToolBar(m_openedDocument.keys()); - m_openedDocument.clear(); m_serverCapabilities = ServerCapabilities(); m_dynamicCapabilities.reset(); for (const DocumentUri &uri : m_diagnostics.keys()) removeDiagnostics(uri); + for (TextEditor::TextDocument *document : m_openedDocument.keys()) + document->disconnect(this); for (TextEditor::TextDocument *document : m_resetAssistProvider.keys()) resetAssistProviders(document); return true; diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 9ca9d06f35..384b78c72d 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -366,6 +366,8 @@ void LanguageClientManager::clientFinished(Client *client) client->log(tr("Unexpectedly finished. Restarting in %1 seconds.").arg(restartTimeoutS), Core::MessageManager::Flash); QTimer::singleShot(restartTimeoutS * 1000, client, [client]() { startClient(client); }); + for (TextEditor::TextDocument *document : m_clientForDocument.keys(client)) + client->deactivateDocument(document); } else { if (unexpectedFinish && !m_shuttingDown) client->log(tr("Unexpectedly finished."), Core::MessageManager::Flash); -- cgit v1.2.1