forked from qt-creator/qt-creator
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 <christian.stenger@qt.io>
This commit is contained in:
@@ -808,11 +808,12 @@ bool Client::reset()
|
|||||||
m_responseHandlers.clear();
|
m_responseHandlers.clear();
|
||||||
m_clientInterface->resetBuffer();
|
m_clientInterface->resetBuffer();
|
||||||
updateEditorToolBar(m_openedDocument.keys());
|
updateEditorToolBar(m_openedDocument.keys());
|
||||||
m_openedDocument.clear();
|
|
||||||
m_serverCapabilities = ServerCapabilities();
|
m_serverCapabilities = ServerCapabilities();
|
||||||
m_dynamicCapabilities.reset();
|
m_dynamicCapabilities.reset();
|
||||||
for (const DocumentUri &uri : m_diagnostics.keys())
|
for (const DocumentUri &uri : m_diagnostics.keys())
|
||||||
removeDiagnostics(uri);
|
removeDiagnostics(uri);
|
||||||
|
for (TextEditor::TextDocument *document : m_openedDocument.keys())
|
||||||
|
document->disconnect(this);
|
||||||
for (TextEditor::TextDocument *document : m_resetAssistProvider.keys())
|
for (TextEditor::TextDocument *document : m_resetAssistProvider.keys())
|
||||||
resetAssistProviders(document);
|
resetAssistProviders(document);
|
||||||
return true;
|
return true;
|
||||||
|
@@ -366,6 +366,8 @@ void LanguageClientManager::clientFinished(Client *client)
|
|||||||
client->log(tr("Unexpectedly finished. Restarting in %1 seconds.").arg(restartTimeoutS),
|
client->log(tr("Unexpectedly finished. Restarting in %1 seconds.").arg(restartTimeoutS),
|
||||||
Core::MessageManager::Flash);
|
Core::MessageManager::Flash);
|
||||||
QTimer::singleShot(restartTimeoutS * 1000, client, [client]() { startClient(client); });
|
QTimer::singleShot(restartTimeoutS * 1000, client, [client]() { startClient(client); });
|
||||||
|
for (TextEditor::TextDocument *document : m_clientForDocument.keys(client))
|
||||||
|
client->deactivateDocument(document);
|
||||||
} else {
|
} else {
|
||||||
if (unexpectedFinish && !m_shuttingDown)
|
if (unexpectedFinish && !m_shuttingDown)
|
||||||
client->log(tr("Unexpectedly finished."), Core::MessageManager::Flash);
|
client->log(tr("Unexpectedly finished."), Core::MessageManager::Flash);
|
||||||
|
Reference in New Issue
Block a user