diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 3d23d0cfb48..2b7594539cc 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -112,6 +112,11 @@ Client::Client(BaseClientInterface *clientInterface) m_tokenSupport.setTokenTypesMap(SemanticTokens::defaultTokenTypesMap()); m_tokenSupport.setTokenModifiersMap(SemanticTokens::defaultTokenModifiersMap()); + + m_shutdownTimer.setInterval(20 /*seconds*/ * 1000); + connect(&m_shutdownTimer, &QTimer::timeout, this, [this] { + LanguageClientManager::deleteClient(this); + }); } QString Client::name() const @@ -325,6 +330,7 @@ void Client::shutdown() }); sendContent(shutdown); m_state = ShutdownRequested; + m_shutdownTimer.start(); } Client::State Client::state() const @@ -1551,6 +1557,7 @@ void Client::initializeCallback(const InitializeRequest::Response &initResponse) void Client::shutDownCallback(const ShutdownRequest::Response &shutdownResponse) { + m_shutdownTimer.stop(); QTC_ASSERT(m_state == ShutdownRequested, return); QTC_ASSERT(m_clientInterface, return); optional errorValue = shutdownResponse.error(); @@ -1563,6 +1570,7 @@ void Client::shutDownCallback(const ShutdownRequest::Response &shutdownResponse) sendMessage(ExitNotification().toBaseMessage()); qCDebug(LOGLSPCLIENT) << "language server " << m_displayName << " shutdown"; m_state = Shutdown; + m_shutdownTimer.start(); } bool Client::sendWorkspceFolderChanges() const diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index c999dd84ef6..d95d5693609 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -305,6 +305,7 @@ private: LogTarget m_logTarget = LogTarget::Ui; bool m_locatorsEnabled = true; bool m_autoRequestCodeActions = true; + QTimer m_shutdownTimer; }; } // namespace LanguageClient