diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-07-25 13:47:10 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2023-07-26 10:18:11 +0200 |
commit | ffa15d0e21ab0eb8248185fb73187e4ad57d27ed (patch) | |
tree | ef21b301c605f1aaf02b7b36577b7265a6a2b81b /tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | |
parent | 747c860354e26a1e1c35e176e9c9c7f8c96e9f51 (diff) |
QML: When marking a QObjectWrapper, also mark its const counterpart
Otherwise the const wrapper will be swept while the object should still
be alive (and vice versa).
Amends commit d3b3fef5a878d7fd53de6a9f9fff196a273930e3.
Pick-to: 6.6 6.5
Fixes: QTBUG-114596
Change-Id: Ib4d8e9f805a229a471ca72f5ff357e3a4c9999a5
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp')
-rw-r--r-- | tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index c6d73dabb0..788e78b0f1 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -10079,6 +10079,9 @@ public: Q_INVOKABLE void triggerSignal() { emit fooMember2Emitted(&m_fooMember2); } + Q_INVOKABLE const FrozenFoo *getConst() { return createFloating(); } + Q_INVOKABLE FrozenFoo *getNonConst() { return createFloating(); } + FrozenFoo *fooMember() { return &m_fooMember; } FrozenFoo *fooMember2() { return &m_fooMember2; } @@ -10088,6 +10091,16 @@ signals: private: const FrozenFoo *fooMemberConst() const { return &m_fooMember; } + FrozenFoo *createFloating() + { + if (!m_floating) { + m_floating = new FrozenFoo; + m_floating->setObjectName(objectName()); + } + return m_floating; + } + + FrozenFoo *m_floating = nullptr; FrozenFoo m_fooMember; FrozenFoo m_fooMember2; }; @@ -10110,6 +10123,17 @@ void tst_qqmlecmascript::frozenQObject() QVERIFY(frozenObjects->property("caughtSignal").toBool()); QCOMPARE(frozenObjects->fooMember()->name(), QStringLiteral("Jane")); QCOMPARE(frozenObjects->fooMember2()->name(), QStringLiteral("Jane")); + + QQmlComponent component3(&engine, testFileUrl("frozenQObject3.qml")); + QScopedPointer<QObject> root3(component3.create()); + QCOMPARE(root3->objectName(), QLatin1String("a/b")); + QVERIFY(root3->property("objConst").value<QObject *>()); + QVERIFY(root3->property("objNonConst").value<QObject *>()); + + QTRY_VERIFY(root3->property("gcs").toInt() > 8); + + QVERIFY(root3->property("objConst").value<QObject *>()); + QVERIFY(root3->property("objNonConst").value<QObject *>()); } struct ConstPointer : QObject |