forked from qt-creator/qt-creator
LanguageClient: use separate variable to save shutdown state
The LanguageClientManager might be already gone. Change-Id: Ia674a8c76e0c1bb39e1503be9cffc20fd69120bb Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -35,6 +35,7 @@ namespace LanguageClient {
|
|||||||
static Q_LOGGING_CATEGORY(Log, "qtc.languageclient.manager", QtWarningMsg)
|
static Q_LOGGING_CATEGORY(Log, "qtc.languageclient.manager", QtWarningMsg)
|
||||||
|
|
||||||
static LanguageClientManager *managerInstance = nullptr;
|
static LanguageClientManager *managerInstance = nullptr;
|
||||||
|
static bool g_shuttingDown = false;
|
||||||
|
|
||||||
LanguageClientManager::LanguageClientManager(QObject *parent)
|
LanguageClientManager::LanguageClientManager(QObject *parent)
|
||||||
: QObject (parent)
|
: QObject (parent)
|
||||||
@@ -112,7 +113,7 @@ void LanguageClientManager::clientStarted(Client *client)
|
|||||||
qCDebug(Log) << "client started: " << client->name() << client;
|
qCDebug(Log) << "client started: " << client->name() << client;
|
||||||
QTC_ASSERT(managerInstance, return);
|
QTC_ASSERT(managerInstance, return);
|
||||||
QTC_ASSERT(client, return);
|
QTC_ASSERT(client, return);
|
||||||
if (managerInstance->m_shuttingDown) {
|
if (g_shuttingDown) {
|
||||||
clientFinished(client);
|
clientFinished(client);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -131,7 +132,7 @@ void LanguageClientManager::clientFinished(Client *client)
|
|||||||
&& client->state() != Client::ShutdownRequested;
|
&& client->state() != Client::ShutdownRequested;
|
||||||
|
|
||||||
if (unexpectedFinish) {
|
if (unexpectedFinish) {
|
||||||
if (!managerInstance->m_shuttingDown) {
|
if (!g_shuttingDown) {
|
||||||
const QList<TextEditor::TextDocument *> &clientDocs
|
const QList<TextEditor::TextDocument *> &clientDocs
|
||||||
= managerInstance->m_clientForDocument.keys(client);
|
= managerInstance->m_clientForDocument.keys(client);
|
||||||
if (client->reset()) {
|
if (client->reset()) {
|
||||||
@@ -153,7 +154,7 @@ void LanguageClientManager::clientFinished(Client *client)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
deleteClient(client);
|
deleteClient(client);
|
||||||
if (managerInstance->m_shuttingDown && managerInstance->m_clients.isEmpty())
|
if (g_shuttingDown && managerInstance->m_clients.isEmpty())
|
||||||
emit managerInstance->shutdownFinished();
|
emit managerInstance->shutdownFinished();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,17 +219,17 @@ void LanguageClientManager::deleteClient(Client *client)
|
|||||||
for (QList<Client *> &clients : managerInstance->m_clientsForSetting)
|
for (QList<Client *> &clients : managerInstance->m_clientsForSetting)
|
||||||
clients.removeAll(client);
|
clients.removeAll(client);
|
||||||
client->deleteLater();
|
client->deleteLater();
|
||||||
if (!managerInstance->m_shuttingDown)
|
if (!g_shuttingDown)
|
||||||
emit instance()->clientRemoved(client);
|
emit instance()->clientRemoved(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LanguageClientManager::shutdown()
|
void LanguageClientManager::shutdown()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(managerInstance, return);
|
QTC_ASSERT(managerInstance, return);
|
||||||
if (managerInstance->m_shuttingDown)
|
if (g_shuttingDown)
|
||||||
return;
|
return;
|
||||||
qCDebug(Log) << "shutdown manager";
|
qCDebug(Log) << "shutdown manager";
|
||||||
managerInstance->m_shuttingDown = true;
|
g_shuttingDown = true;
|
||||||
const auto clients = managerInstance->clients();
|
const auto clients = managerInstance->clients();
|
||||||
for (Client *client : clients)
|
for (Client *client : clients)
|
||||||
shutdownClient(client);
|
shutdownClient(client);
|
||||||
@@ -242,7 +243,7 @@ void LanguageClientManager::shutdown()
|
|||||||
|
|
||||||
bool LanguageClientManager::isShuttingDown()
|
bool LanguageClientManager::isShuttingDown()
|
||||||
{
|
{
|
||||||
return managerInstance->m_shuttingDown;
|
return g_shuttingDown;
|
||||||
}
|
}
|
||||||
|
|
||||||
LanguageClientManager *LanguageClientManager::instance()
|
LanguageClientManager *LanguageClientManager::instance()
|
||||||
|
@@ -100,7 +100,6 @@ private:
|
|||||||
|
|
||||||
QList<Client *> reachableClients();
|
QList<Client *> reachableClients();
|
||||||
|
|
||||||
bool m_shuttingDown = false;
|
|
||||||
QList<Client *> m_clients;
|
QList<Client *> m_clients;
|
||||||
QList<BaseSettings *> m_currentSettings; // owned
|
QList<BaseSettings *> m_currentSettings; // owned
|
||||||
QMap<QString, QList<Client *>> m_clientsForSetting;
|
QMap<QString, QList<Client *>> m_clientsForSetting;
|
||||||
|
Reference in New Issue
Block a user