|
|
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 |
|