From cf91b2c033093a4319245f17994b97a7fb510541 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 22 May 2020 12:06:30 +0200 Subject: LSP: Do not accumulate connections during signal emission Amends cdeac76df3. During the execution of updateProject() triggered by a fileListChanged() emission new connections to the fileListChanged() were added, effectively making the emit never return and gobbling up all available memory. Change-Id: I18a1ab9b32c2e797e990449385a5353782211560 Reviewed-by: Christian Stenger --- src/plugins/languageclient/languageclientmanager.cpp | 11 +++++++---- src/plugins/languageclient/languageclientmanager.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'src/plugins/languageclient') diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 1147aae74ed..41dc0f31b48 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -76,7 +76,7 @@ LanguageClientManager::LanguageClientManager(QObject *parent) connect(EditorManager::instance(), &EditorManager::aboutToSave, this, &LanguageClientManager::documentWillSave); connect(SessionManager::instance(), &SessionManager::projectAdded, - this, &LanguageClientManager::updateProject); + this, &LanguageClientManager::projectAdded); connect(SessionManager::instance(), &SessionManager::projectRemoved, this, &LanguageClientManager::projectRemoved); } @@ -523,12 +523,15 @@ void LanguageClientManager::updateProject(ProjectExplorer::Project *project) } } } + for (Client *interface : reachableClients()) + interface->projectOpened(project); +} + +void LanguageClientManager::projectAdded(ProjectExplorer::Project *project) +{ connect(project, &ProjectExplorer::Project::fileListChanged, this, [this, project]() { updateProject(project); }); - - for (Client *interface : reachableClients()) - interface->projectOpened(project); } void LanguageClientManager::projectRemoved(ProjectExplorer::Project *project) diff --git a/src/plugins/languageclient/languageclientmanager.h b/src/plugins/languageclient/languageclientmanager.h index 64c54d8533e..aece267d0d3 100644 --- a/src/plugins/languageclient/languageclientmanager.h +++ b/src/plugins/languageclient/languageclientmanager.h @@ -109,6 +109,7 @@ private: void documentWillSave(Core::IDocument *document); void updateProject(ProjectExplorer::Project *project); + void projectAdded(ProjectExplorer::Project *project); void projectRemoved(ProjectExplorer::Project *project); QVector reachableClients(); -- cgit v1.2.3