LanguageClient: Fix crashed client restart condition

Change-Id: I4b0195a512b6b1dcbcc6fd02f6014a27b4606ea0
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2023-10-20 10:53:59 +02:00
parent 5f45c36b6f
commit a18ea390e1
5 changed files with 8 additions and 2 deletions

View File

@@ -574,6 +574,8 @@ QString Client::stateString() const
//: language client state
case InitializeRequested: return Tr::tr("initialize requested");
//: language client state
case FailedToInitialize: return Tr::tr("failed to initialize");
//: language client state
case Initialized: return Tr::tr("initialized");
//: language client state
case ShutdownRequested: return Tr::tr("shutdown requested");
@@ -1696,7 +1698,7 @@ bool ClientPrivate::reset()
void Client::setError(const QString &message)
{
log(message);
d->m_state = Error;
d->m_state = d->m_state < Initialized ? FailedToInitialize : Error;
}
ProgressManager *Client::progressManager()

View File

@@ -77,6 +77,7 @@ public:
enum State {
Uninitialized,
InitializeRequested,
FailedToInitialize,
Initialized,
ShutdownRequested,
Shutdown,

View File

@@ -172,7 +172,8 @@ void LanguageClientManager::clientFinished(Client *client)
= managerInstance->m_clientForDocument.keys(client);
if (unexpectedFinish) {
if (!PluginManager::isShuttingDown()) {
if (client->state() == Client::Initialized && client->reset()) {
const bool shouldRestart = client->state() > Client::FailedToInitialize;
if (shouldRestart && client->reset()) {
qCDebug(Log) << "restart unexpectedly finished client: " << client->name() << client;
client->log(
Tr::tr("Unexpectedly finished. Restarting in %1 seconds.").arg(restartTimeoutS));

View File

@@ -784,6 +784,7 @@ void QmlJSEditorDocumentPrivate::settingsChanged()
case LanguageClient::Client::State::Initialized:
setSourcesWithCapabilities(client->capabilities());
break;
case LanguageClient::Client::State::FailedToInitialize:
case LanguageClient::Client::State::Error:
qCWarning(qmllsLog) << "qmlls" << newQmlls << "requested for document" << q->filePath()
<< "had errors, skipping setSourcesWithCababilities";

View File

@@ -39,6 +39,7 @@ QmllsClient *QmllsClient::clientForQmlls(const FilePath &qmlls)
case Client::State::InitializeRequested:
case Client::State::Initialized:
return client;
case Client::State::FailedToInitialize:
case Client::State::ShutdownRequested:
case Client::State::Shutdown:
case Client::State::Error: