[new compiler] Fix qquickanimation test crash
authorSimon Hausmann <simon.hausmann@digia.com>
Wed, 26 Feb 2014 10:43:21 +0000 (11:43 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Sun, 2 Mar 2014 13:49:06 +0000 (14:49 +0100)
Share finalization callbacks across all sub-instances of ObjectCreator,
by moving into into SharedState.

Change-Id: Ibcd679caecd2009b4705d04c859b2fea4c2295fd
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/qml/qqmlengine.cpp
src/qml/qml/qqmlobjectcreator.cpp
src/qml/qml/qqmlobjectcreator_p.h

index d373c00..6336835 100644 (file)
@@ -1050,7 +1050,7 @@ void QQmlEnginePrivate::registerFinalizeCallback(QObject *obj, int index)
     if (activeVME) {
         activeVME->finalizeCallbacks.append(qMakePair(QPointer<QObject>(obj), index));
     } else if (activeObjectCreator) {
-        activeObjectCreator->finalizeCallbacks.append(qMakePair(QPointer<QObject>(obj), index));
+        activeObjectCreator->finalizeCallbacks()->append(qMakePair(QPointer<QObject>(obj), index));
     } else {
         void *args[] = { 0 };
         QMetaObject::metacall(obj, QMetaObject::InvokeMetaMethod, index, args);
index f11b383..cce7ccf 100644 (file)
@@ -1089,15 +1089,15 @@ QQmlContextData *QQmlObjectCreator::finalize(QQmlInstantiationInterrupt &interru
 
     {
     QQmlTrace trace("VME Finalize Callbacks");
-    for (int ii = 0; ii < finalizeCallbacks.count(); ++ii) {
-        QQmlEnginePrivate::FinalizeCallback callback = finalizeCallbacks.at(ii);
+    for (int ii = 0; ii < sharedState->finalizeCallbacks.count(); ++ii) {
+        QQmlEnginePrivate::FinalizeCallback callback = sharedState->finalizeCallbacks.at(ii);
         QObject *obj = callback.first;
         if (obj) {
             void *args[] = { 0 };
             QMetaObject::metacall(obj, QMetaObject::InvokeMetaMethod, callback.second, args);
         }
     }
-    finalizeCallbacks.clear();
+    sharedState->finalizeCallbacks.clear();
     }
 
     {
index c48d7d3..31fbbbd 100644 (file)
@@ -67,7 +67,7 @@ public:
 
     QQmlComponentAttached **componentAttachment() { return &sharedState->componentAttached; }
 
-    QList<QQmlEnginePrivate::FinalizeCallback> finalizeCallbacks;
+    QList<QQmlEnginePrivate::FinalizeCallback> *finalizeCallbacks() { return &sharedState->finalizeCallbacks; }
 
     QList<QQmlError> errors;
 
@@ -96,6 +96,7 @@ private:
         QFiniteStack<QQmlAbstractBinding*> allCreatedBindings;
         QFiniteStack<QQmlParserStatus*> allParserStatusCallbacks;
         QQmlComponentAttached *componentAttached;
+        QList<QQmlEnginePrivate::FinalizeCallback> finalizeCallbacks;
     };
 
     QQmlEngine *engine;