aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-05-22 12:06:30 +0200
committerhjk <hjk@qt.io>2020-05-25 07:54:42 +0000
commitcf91b2c033093a4319245f17994b97a7fb510541 (patch)
tree99b88c2c158cfb1e404dbe69f58341ed91f78923 /src/plugins/languageclient
parentd38a6fe1dfcf171b8c8528588c03a1439d9623e8 (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.cpp11
-rw-r--r--src/plugins/languageclient/languageclientmanager.h1
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();