summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore_p.cpp
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@theqtcompany.com>2015-01-16 17:07:22 +0100
committerKai Koehne <kai.koehne@theqtcompany.com>2015-01-20 11:24:15 +0100
commit23c08c852bd7d82c601aa73b62e30c43bc24c708 (patch)
tree45002247620e1deba8db5010533e2a850df32e24 /src/libs/installer/packagemanagercore_p.cpp
parentbb052608fbcec1ad580660754157fa6ecc3512fc (diff)
Delete components only after they have been removed from the lists
This fixes a crash when a component destructor e.g. tries to unregister a widget: This might lead to the creation of a new scripting engine, which then tries to register all components into the engine, including components that have already been deleted ... Avoid this by first cleaning the lists, and then doing the actual deletion. Task-number: QTIFW-612 Change-Id: I708a1ade3b3cc15006eefe394c2d81bf47ebe754 Reviewed-by: Niels Weber <niels.weber@theqtcompany.com>
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 467bf5408..aa712c675 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -433,17 +433,20 @@ ScriptEngine *PackageManagerCorePrivate::controlScriptEngine() const
void PackageManagerCorePrivate::clearAllComponentLists()
{
- qDeleteAll(m_rootComponents);
+ QList<QInstaller::Component*> toDelete;
+
+ toDelete << m_rootComponents;
m_rootComponents.clear();
m_rootDependencyReplacements.clear();
const QList<QPair<Component*, Component*> > list = m_componentsToReplaceAllMode.values();
for (int i = 0; i < list.count(); ++i)
- delete list.at(i).second;
+ toDelete << list.at(i).second;
m_componentsToReplaceAllMode.clear();
m_componentsToInstallCalculated = false;
+ qDeleteAll(toDelete);
cleanUpComponentEnvironment();
}
@@ -460,8 +463,6 @@ void PackageManagerCorePrivate::clearUpdaterComponentLists()
usedComponents.insert(list.at(i).second);
}
- qDeleteAll(usedComponents);
-
m_updaterComponents.clear();
m_updaterComponentsDeps.clear();
@@ -470,6 +471,7 @@ void PackageManagerCorePrivate::clearUpdaterComponentLists()
m_componentsToReplaceUpdaterMode.clear();
m_componentsToInstallCalculated = false;
+ qDeleteAll(usedComponents);
cleanUpComponentEnvironment();
}