b16256e
From 73e8321255d9f0e70529a58c10dbaf4790a9a659 Mon Sep 17 00:00:00 2001
b16256e
From: David Edmundson <davidedmundson@kde.org>
b16256e
Date: Tue, 6 Mar 2018 10:56:23 +0000
b16256e
Subject: [PATCH 28/29] Rebuild property cache in QObjectWrapper::getProperty
b16256e
 if deleted
b16256e
b16256e
QQmlData is shared between engines, but the relevant QObjectWrapper is
b16256e
not.
b16256e
b16256e
Since 749a7212e903d8e8c6f256edb1836b9449cc7fe1 when a QObjectWrapper is
b16256e
deleted it resets the shared QQmlData propertyCache.
b16256e
b16256e
ab5d4c78224c9ec79165e8890e5f8b8e838e0709 fixed this situation for
b16256e
bindings, however we would still hit effectively the same crash in the
b16256e
same situation if a function is evaluated before a binding.
b16256e
b16256e
Change-Id: I20cd91cd8e31fd0176d542822c67e81a790599ba
b16256e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
b16256e
---
b16256e
 src/qml/jsruntime/qv4qobjectwrapper.cpp | 5 +++++
b16256e
 1 file changed, 5 insertions(+)
b16256e
b16256e
diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp
b16256e
index 5ebd385cf..c1bbe2a33 100644
b16256e
--- a/src/qml/jsruntime/qv4qobjectwrapper.cpp
b16256e
+++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp
b16256e
@@ -335,6 +335,11 @@ ReturnedValue QObjectWrapper::getProperty(ExecutionEngine *engine, QObject *obje
b16256e
     if (!ddata)
b16256e
         return QV4::Encode::undefined();
b16256e
 
b16256e
+    if (Q_UNLIKELY(!ddata->propertyCache)) {
b16256e
+        ddata->propertyCache = QQmlEnginePrivate::get(engine)->cache(object->metaObject());
b16256e
+        ddata->propertyCache->addref();
b16256e
+    }
b16256e
+
b16256e
     QQmlPropertyCache *cache = ddata->propertyCache;
b16256e
     Q_ASSERT(cache);
b16256e
     QQmlPropertyData *property = cache->property(propertyIndex);
b16256e
-- 
b16256e
2.14.3
b16256e