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:
David Schulz
2022-10-11 10:24:57 +02:00
parent 76ffb54e90
commit fc24f5c26d
2 changed files with 8 additions and 8 deletions

View File

@@ -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()

View File

@@ -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;