forked from qt-creator/qt-creator
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:
@@ -76,7 +76,7 @@ LanguageClientManager::LanguageClientManager(QObject *parent)
|
|||||||
connect(EditorManager::instance(), &EditorManager::aboutToSave,
|
connect(EditorManager::instance(), &EditorManager::aboutToSave,
|
||||||
this, &LanguageClientManager::documentWillSave);
|
this, &LanguageClientManager::documentWillSave);
|
||||||
connect(SessionManager::instance(), &SessionManager::projectAdded,
|
connect(SessionManager::instance(), &SessionManager::projectAdded,
|
||||||
this, &LanguageClientManager::updateProject);
|
this, &LanguageClientManager::projectAdded);
|
||||||
connect(SessionManager::instance(), &SessionManager::projectRemoved,
|
connect(SessionManager::instance(), &SessionManager::projectRemoved,
|
||||||
this, &LanguageClientManager::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]() {
|
connect(project, &ProjectExplorer::Project::fileListChanged, this, [this, project]() {
|
||||||
updateProject(project);
|
updateProject(project);
|
||||||
});
|
});
|
||||||
|
|
||||||
for (Client *interface : reachableClients())
|
|
||||||
interface->projectOpened(project);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LanguageClientManager::projectRemoved(ProjectExplorer::Project *project)
|
void LanguageClientManager::projectRemoved(ProjectExplorer::Project *project)
|
||||||
|
@@ -109,6 +109,7 @@ private:
|
|||||||
void documentWillSave(Core::IDocument *document);
|
void documentWillSave(Core::IDocument *document);
|
||||||
|
|
||||||
void updateProject(ProjectExplorer::Project *project);
|
void updateProject(ProjectExplorer::Project *project);
|
||||||
|
void projectAdded(ProjectExplorer::Project *project);
|
||||||
void projectRemoved(ProjectExplorer::Project *project);
|
void projectRemoved(ProjectExplorer::Project *project);
|
||||||
|
|
||||||
QVector<Client *> reachableClients();
|
QVector<Client *> reachableClients();
|
||||||
|
Reference in New Issue
Block a user