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
|
//: language client state
|
||||||
case InitializeRequested: return Tr::tr("initialize requested");
|
case InitializeRequested: return Tr::tr("initialize requested");
|
||||||
//: language client state
|
//: language client state
|
||||||
|
case FailedToInitialize: return Tr::tr("failed to initialize");
|
||||||
|
//: language client state
|
||||||
case Initialized: return Tr::tr("initialized");
|
case Initialized: return Tr::tr("initialized");
|
||||||
//: language client state
|
//: language client state
|
||||||
case ShutdownRequested: return Tr::tr("shutdown requested");
|
case ShutdownRequested: return Tr::tr("shutdown requested");
|
||||||
@@ -1696,7 +1698,7 @@ bool ClientPrivate::reset()
|
|||||||
void Client::setError(const QString &message)
|
void Client::setError(const QString &message)
|
||||||
{
|
{
|
||||||
log(message);
|
log(message);
|
||||||
d->m_state = Error;
|
d->m_state = d->m_state < Initialized ? FailedToInitialize : Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProgressManager *Client::progressManager()
|
ProgressManager *Client::progressManager()
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public:
|
|||||||
enum State {
|
enum State {
|
||||||
Uninitialized,
|
Uninitialized,
|
||||||
InitializeRequested,
|
InitializeRequested,
|
||||||
|
FailedToInitialize,
|
||||||
Initialized,
|
Initialized,
|
||||||
ShutdownRequested,
|
ShutdownRequested,
|
||||||
Shutdown,
|
Shutdown,
|
||||||
|
|||||||
@@ -172,7 +172,8 @@ void LanguageClientManager::clientFinished(Client *client)
|
|||||||
= managerInstance->m_clientForDocument.keys(client);
|
= managerInstance->m_clientForDocument.keys(client);
|
||||||
if (unexpectedFinish) {
|
if (unexpectedFinish) {
|
||||||
if (!PluginManager::isShuttingDown()) {
|
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;
|
qCDebug(Log) << "restart unexpectedly finished client: " << client->name() << client;
|
||||||
client->log(
|
client->log(
|
||||||
Tr::tr("Unexpectedly finished. Restarting in %1 seconds.").arg(restartTimeoutS));
|
Tr::tr("Unexpectedly finished. Restarting in %1 seconds.").arg(restartTimeoutS));
|
||||||
|
|||||||
@@ -784,6 +784,7 @@ void QmlJSEditorDocumentPrivate::settingsChanged()
|
|||||||
case LanguageClient::Client::State::Initialized:
|
case LanguageClient::Client::State::Initialized:
|
||||||
setSourcesWithCapabilities(client->capabilities());
|
setSourcesWithCapabilities(client->capabilities());
|
||||||
break;
|
break;
|
||||||
|
case LanguageClient::Client::State::FailedToInitialize:
|
||||||
case LanguageClient::Client::State::Error:
|
case LanguageClient::Client::State::Error:
|
||||||
qCWarning(qmllsLog) << "qmlls" << newQmlls << "requested for document" << q->filePath()
|
qCWarning(qmllsLog) << "qmlls" << newQmlls << "requested for document" << q->filePath()
|
||||||
<< "had errors, skipping setSourcesWithCababilities";
|
<< "had errors, skipping setSourcesWithCababilities";
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ QmllsClient *QmllsClient::clientForQmlls(const FilePath &qmlls)
|
|||||||
case Client::State::InitializeRequested:
|
case Client::State::InitializeRequested:
|
||||||
case Client::State::Initialized:
|
case Client::State::Initialized:
|
||||||
return client;
|
return client;
|
||||||
|
case Client::State::FailedToInitialize:
|
||||||
case Client::State::ShutdownRequested:
|
case Client::State::ShutdownRequested:
|
||||||
case Client::State::Shutdown:
|
case Client::State::Shutdown:
|
||||||
case Client::State::Error:
|
case Client::State::Error:
|
||||||
|
|||||||
Reference in New Issue
Block a user