aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlengine.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-10-24 12:32:39 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2017-10-24 12:32:39 +0000
commit1aa91f8b0b140c417c6e97dfd22fa498d31bceb6 (patch)
tree714b9c79ca84cf9bda9912ea723cd925f0e8f4c9 /src/qml/qml/qqmlengine.cpp
parent83c8f8d90a960965c1f166c4421f514f4236212a (diff)
parent15dd1b7883f5dbe66266aeb588381f85f3532ab9 (diff)
Merge "Merge remote-tracking branch 'origin/5.9' into 5.10" into refs/staging/5.10
Diffstat (limited to 'src/qml/qml/qqmlengine.cpp')
-rw-r--r--src/qml/qml/qqmlengine.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp
index 5f4e291775..3ce50132c3 100644
--- a/src/qml/qml/qqmlengine.cpp
+++ b/src/qml/qml/qqmlengine.cpp
@@ -745,7 +745,7 @@ QQmlData::QQmlData()
hasInterceptorMetaObject(false), hasVMEMetaObject(false), parentFrozen(false),
bindingBitsSize(MaxInlineBits), bindingBitsValue(0), notifyList(0),
bindings(0), signalHandlers(0), nextContextObject(0), prevContextObject(0),
- lineNumber(0), columnNumber(0), jsEngineId(0), compilationUnit(0), deferredData(0),
+ lineNumber(0), columnNumber(0), jsEngineId(0), compilationUnit(0),
propertyCache(0), guards(0), extendedData(0)
{
init();
@@ -1502,18 +1502,16 @@ void qmlExecuteDeferred(QObject *object)
{
QQmlData *data = QQmlData::get(object);
- if (data && data->deferredData && !data->wasDeleted(object)) {
+ if (data && !data->deferredData.isEmpty() && !data->wasDeleted(object)) {
QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine);
- QQmlComponentPrivate::ConstructionState state;
+ QQmlComponentPrivate::DeferredState state;
QQmlComponentPrivate::beginDeferred(ep, object, &state);
// Release the reference for the deferral action (we still have one from construction)
- data->deferredData->compilationUnit->release();
- delete data->deferredData;
- data->deferredData = 0;
+ data->releaseDeferredData();
- QQmlComponentPrivate::complete(ep, &state);
+ QQmlComponentPrivate::completeDeferred(ep, &state);
}
}
@@ -1671,6 +1669,15 @@ void QQmlData::NotifyList::layout()
todo = 0;
}
+void QQmlData::releaseDeferredData()
+{
+ for (DeferredData *deferData : qAsConst(deferredData)) {
+ deferData->compilationUnit->release();
+ delete deferData;
+ }
+ deferredData.clear();
+}
+
void QQmlData::addNotify(int index, QQmlNotifierEndpoint *endpoint)
{
if (!notifyList) {
@@ -1745,11 +1752,7 @@ void QQmlData::destroyed(QObject *object)
compilationUnit = 0;
}
- if (deferredData) {
- deferredData->compilationUnit->release();
- delete deferredData;
- deferredData = 0;
- }
+ releaseDeferredData();
QQmlBoundSignal *signalHandler = signalHandlers;
while (signalHandler) {