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>
This commit is contained in:
hjk
2020-05-22 12:06:30 +02:00
parent d38a6fe1df
commit cf91b2c033
2 changed files with 8 additions and 4 deletions

View File

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

View File

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