diff options
author | Liang Qi <liang.qi@qt.io> | 2017-10-24 12:32:39 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2017-10-24 12:32:39 +0000 |
commit | 1aa91f8b0b140c417c6e97dfd22fa498d31bceb6 (patch) | |
tree | 714b9c79ca84cf9bda9912ea723cd925f0e8f4c9 /src/qml/qml/qqmlengine.cpp | |
parent | 83c8f8d90a960965c1f166c4421f514f4236212a (diff) | |
parent | 15dd1b7883f5dbe66266aeb588381f85f3532ab9 (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.cpp | 27 |
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) { |