forked from qt-creator/qt-creator
LanguageClient: Fix crashed client restart condition
Change-Id: I4b0195a512b6b1dcbcc6fd02f6014a27b4606ea0 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -77,6 +77,7 @@ public:
|
||||
enum State {
|
||||
Uninitialized,
|
||||
InitializeRequested,
|
||||
FailedToInitialize,
|
||||
Initialized,
|
||||
ShutdownRequested,
|
||||
Shutdown,
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user