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 <chris.adams@jollamobile.com>
This commit is contained in:
Alan Alpert 2013-01-24 17:31:41 -08:00 committed by The Qt Project
parent 6327d29471
commit d005c5c80b
1 changed files with 6 additions and 0 deletions

View File

@ -813,6 +813,12 @@ QDateTime QV8Engine::qtDateTimeFromJsDate(double jsDate)
v8::Persistent<v8::Object> *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.