aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2019-10-23 16:55:35 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2019-10-24 10:11:25 +0200
commitea59491ff4ddb438c7d93d2aa470b7fb003a7189 (patch)
tree1b3e2d110e4718a63134f1eb5ba947a39d0c8547 /src
parent1e94466b06190061a86e9918c5e45279171e600f (diff)
Fix spurious test failures in qtquickcontrols
This patch amends commit 3f96bf1f43252daf26ed61df2b3456f2dc81183b by ensuring that the allJavaScriptObjects JS stack pointer does not begin dangling during the deferred binding/property population. Change-Id: I8fae8ba0e974df2f0d5f40041126ca6f1a6f9436 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/qml/qml/qqmlobjectcreator.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp
index 44006c3f6a..27385d1730 100644
--- a/src/qml/qml/qqmlobjectcreator.cpp
+++ b/src/qml/qml/qqmlobjectcreator.cpp
@@ -59,6 +59,8 @@
#include <private/qjsvalue_p.h>
#include <private/qv4generatorobject_p.h>
+#include <QScopedValueRollback>
+
#include <qtqml_tracepoints_p.h>
QT_USE_NAMESPACE
@@ -241,9 +243,6 @@ void QQmlObjectCreator::beginPopulateDeferred(QQmlContextData *newContext)
Q_ASSERT(topLevelCreator);
Q_ASSERT(!sharedState->allJavaScriptObjects);
-
- QV4::Scope valueScope(v4);
- sharedState->allJavaScriptObjects = valueScope.alloc(compilationUnit->totalObjectCount);
}
void QQmlObjectCreator::populateDeferred(QObject *instance, int deferredIndex,
@@ -260,6 +259,8 @@ void QQmlObjectCreator::populateDeferred(QObject *instance, int deferredIndex,
qSwap(_scopeObject, scopeObject);
QV4::Scope valueScope(v4);
+ QScopedValueRollback<QV4::Value*> jsObjectGuard(sharedState->allJavaScriptObjects,
+ valueScope.alloc(compilationUnit->totalObjectCount));
Q_ASSERT(topLevelCreator);
QV4::QmlContext *qmlContext = static_cast<QV4::QmlContext *>(valueScope.alloc());