From e5c4d20e2b9796e13b70b1b67f7d8dd0904dabb9 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 9 Nov 2023 08:28:04 +0100 Subject: [PATCH] LanguageClient: Reset maximum restart tries on explicit restart If the user forces the language client to restart for whatever reason the client may end up in not starting anymore depending on the number of restarts that had been done already. So, explicitly reset the counter in case the user triggers the restart. Change-Id: Ie5f33c8dc3d565b6126badc9708906fc14f4e743 Reviewed-by: David Schulz --- src/plugins/languageclient/client.cpp | 5 +++++ src/plugins/languageclient/client.h | 1 + src/plugins/languageclient/languageclientmanager.cpp | 1 + 3 files changed, 7 insertions(+) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 976704fed5b..def0016f3ab 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -592,6 +592,11 @@ bool Client::reachable() const return d->m_state == Initialized; } +void Client::resetRestartCounter() +{ + d->m_restartsLeft = ClientPrivate::MaxRestarts; +} + void Client::setClientInfo(const LanguageServerProtocol::ClientInfo &clientInfo) { d->m_clientInfo = clientInfo; diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index aba2b996754..fdeb1356d6c 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -86,6 +86,7 @@ public: State state() const; QString stateString() const; bool reachable() const; + void resetRestartCounter(); void setClientInfo(const LanguageServerProtocol::ClientInfo &clientInfo); // capabilities diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index bb655e2d8f8..81838357bb9 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -159,6 +159,7 @@ void LanguageClientManager::clientFinished(Client *client) QTC_ASSERT(managerInstance, return); if (managerInstance->m_restartingClients.remove(client)) { + client->resetRestartCounter(); client->reset(); client->start(); return;