From: Alan Alpert Date: Fri, 25 Jan 2013 01:31:41 +0000 (-0800) Subject: Strengthen reference to var properties during construction X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=d005c5c80b6fff835adb350a780d80348549bc64;p=konrad%2Fqtdeclarative.git Strengthen reference to var properties during construction Normally var properties are kept alive by a reference to the object they are declared on, but during the construction of that object the GC may not be aware of said object. This change uses a strong reference during GC passes which take place while the object is being constructed. Task-number: QTBUG-29138 Change-Id: Ieecfcc7567aefac0d67cb933728daf16ed3eed0a Reviewed-by: Christopher Adams --- diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index 3fe3d28..2619c1a 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -813,6 +813,12 @@ QDateTime QV8Engine::qtDateTimeFromJsDate(double jsDate) v8::Persistent *QV8Engine::findOwnerAndStrength(QObject *object, bool *shouldBeStrong) { + QQmlData *data = QQmlData::get(object); + if (data && data->rootObjectInCreation) { // When the object is still being created it may not show up to the GC. + *shouldBeStrong = true; + return 0; + } + QObject *parent = object->parent(); if (!parent) { // if the object has JS ownership, the object's v8object owns the lifetime of the persistent value.