aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickloader.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-12-05 16:21:03 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-06 15:18:47 +0100
commitadaedcb9ead1c536ff3d8fba0fb9f4fc262d4d45 (patch)
tree7d798f62b3ad61a038468e4e418899388966f968 /src/quick/items/qquickloader.cpp
parent433949df18625e5a04d8e83908ee51f703380f21 (diff)
Fix crash in QQuickLoader when source component is garbage collected
It may happen that the QQuickLoader is the last entity left in the system holding a reference to the QQmlComponent *sourceComponent. We have to let the garbage collector know about that by keeping a persistent value for it. Task-number: QTBUG-35334 Change-Id: I715864440378fd9dd4f2d5ef8ff2f171c81ed7ef Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/quick/items/qquickloader.cpp')
-rw-r--r--src/quick/items/qquickloader.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp
index 7d04be2393..b83c21428c 100644
--- a/src/quick/items/qquickloader.cpp
+++ b/src/quick/items/qquickloader.cpp
@@ -106,6 +106,7 @@ void QQuickLoaderPrivate::clear()
component->deleteLater();
component = 0;
}
+ componentStrongReference.clear();
source = QUrl();
if (item) {
@@ -472,6 +473,10 @@ void QQuickLoader::setSourceComponent(QQmlComponent *comp)
d->clear();
d->component = comp;
+ if (comp) {
+ if (QQmlData *ddata = QQmlData::get(comp))
+ d->componentStrongReference = ddata->jsWrapper.value();
+ }
d->loadingFromSource = false;
if (d->active)