diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2019-10-23 16:55:35 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2019-10-24 10:11:25 +0200 |
commit | ea59491ff4ddb438c7d93d2aa470b7fb003a7189 (patch) | |
tree | 1b3e2d110e4718a63134f1eb5ba947a39d0c8547 /src | |
parent | 1e94466b06190061a86e9918c5e45279171e600f (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.cpp | 7 |
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()); |