diff options
author | hjk <hjk@qt.io> | 2020-05-22 12:06:30 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2020-05-25 07:54:42 +0000 |
commit | cf91b2c033093a4319245f17994b97a7fb510541 (patch) | |
tree | 99b88c2c158cfb1e404dbe69f58341ed91f78923 /src/plugins/languageclient | |
parent | d38a6fe1dfcf171b8c8528588c03a1439d9623e8 (diff) |
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 <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient')
-rw-r--r-- | src/plugins/languageclient/languageclientmanager.cpp | 11 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientmanager.h | 1 |
2 files changed, 8 insertions, 4 deletions
diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 1147aae74e..41dc0f31b4 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 64c54d8533..aece267d0d 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<Client *> reachableClients(); |