aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2022-04-11 15:18:10 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2022-06-08 18:10:36 +0200
commite70d6e6b4543d91dc9b4eac466146bde1487ba6f (patch)
treedb38857c60716aa53d10ac2e428e72a0a494feb0 /src/qml
parent00821ec4d5de95eaa1e6f86b99b59339d3dd2225 (diff)
Immediately complete component upon creation failure
We do not want to wait until reaching the Component destructor (at which point e.g. the engine might be gone). Change-Id: Ic0e4383ec4e3759d9f02847413a25191a01286cb Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Maximilian Goldstein <max.goldstein@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> (cherry picked from commit 759090f59140d0b38c7bd57480ea6cd93d4cf0d3)
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/qml/qqmlcomponent.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp
index addee70b6b..f54eee3e72 100644
--- a/src/qml/qml/qqmlcomponent.cpp
+++ b/src/qml/qml/qqmlcomponent.cpp
@@ -862,8 +862,16 @@ QObject *QQmlComponent::create(QQmlContext *context)
Q_D(QQmlComponent);
QObject *rv = d->doBeginCreate(this, context);
- if (rv)
+ if (rv) {
completeCreate();
+ } else if (d->state.completePending) {
+ // overridden completCreate might assume that
+ // the object has actually been created
+ ++creationDepth.localData();
+ QQmlEnginePrivate *ep = QQmlEnginePrivate::get(d->engine);
+ d->complete(ep, &d->state);
+ --creationDepth.localData();
+ }
if (rv && !d->requiredProperties().empty()) {
delete rv;
return nullptr;