diff options
author | David Schulz <david.schulz@qt.io> | 2018-09-13 13:39:01 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2018-09-19 10:44:58 +0000 |
commit | ba5f93003ed859947147b7f76d276425d76ab83c (patch) | |
tree | ccc9f4963a2a951aa76fa916ce7012cd820fda65 /src/plugins/languageclient/languageclientsettings.cpp | |
parent | a376469eb62a59db33b7a7f3eddde2e22db8ddf7 (diff) | |
download | qt-creator-ba5f93003ed859947147b7f76d276425d76ab83c.tar.gz |
LSP: correctly shutdown client that is currently being restarted
Change-Id: I9fb0ccd9aa181515efc9368b0b369dfc39dffcd1
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/languageclient/languageclientsettings.cpp')
-rw-r--r-- | src/plugins/languageclient/languageclientsettings.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/plugins/languageclient/languageclientsettings.cpp b/src/plugins/languageclient/languageclientsettings.cpp index e43d064f01..c059dafed0 100644 --- a/src/plugins/languageclient/languageclientsettings.cpp +++ b/src/plugins/languageclient/languageclientsettings.cpp @@ -351,7 +351,8 @@ void LanguageClientSettingsModel::applyChanges() QList<LanguageClientSettings> toStart = m_settings; // check currently registered interfaces for (auto interface : interfaces) { - auto setting = Utils::findOr(m_settings, LanguageClientSettings(), [interface](const LanguageClientSettings &setting){ + auto setting = Utils::findOr(m_settings, LanguageClientSettings(), + [interface](const LanguageClientSettings &setting){ return interface->matches(setting); }); if (setting.isValid() && setting.m_enabled) { @@ -362,8 +363,12 @@ void LanguageClientSettingsModel::applyChanges() toShutdown << interface; } } - for (auto interface : toShutdown) - interface->shutdown(); + for (auto interface : toShutdown) { + if (interface->reachable()) + interface->shutdown(); + else + LanguageClientManager::deleteClient(interface); + } for (auto setting : toStart) { if (setting.isValid() && setting.m_enabled) LanguageClientManager::startClient(setting); |