LSP: correctly shutdown client that is currently being restarted

Change-Id: I9fb0ccd9aa181515efc9368b0b369dfc39dffcd1
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
David Schulz
2018-09-13 13:39:01 +02:00
parent a376469eb6
commit ba5f93003e
3 changed files with 22 additions and 7 deletions

View File

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