diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-12-07 09:04:00 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2015-12-07 14:54:18 +0000 |
commit | f9f99c43fbea600f61d065b30a5453e95dfa6ade (patch) | |
tree | 038fc2abe32b84a4b8053fd37f0357c03d3f3e72 /tests/auto/quick/qquickanimations/tst_qquickanimations.cpp | |
parent | 94e9fab2d81d076fd59a6a5a4d4ef093f37e05f9 (diff) |
QQuickAnimatorJob: store the target with a QPointer
This avoids ending up with invalid pointers when under some circumstances the
target (which is not owned by the QQuickAnimatorJob) is destroyed between the
time the QQuickAnimatorJob is created and the time it is initialized. This is
the case when the target of an Animator is the item loaded by a Loader and
that the animator is started just before setting the Loader to inactive.
Also added an auto test for that special case.
Task-number: QTBUG-49634
Change-Id: Iab9bfe76d13755ba735432c6f97bde175d308814
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Diffstat (limited to 'tests/auto/quick/qquickanimations/tst_qquickanimations.cpp')
-rw-r--r-- | tests/auto/quick/qquickanimations/tst_qquickanimations.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp index 2b805e9eeb..d234cd2d94 100644 --- a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp +++ b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp @@ -104,6 +104,7 @@ private slots: void scriptActionBug(); void groupAnimationNullChildBug(); void scriptActionCrash(); + void animatorInvalidTargetCrash(); }; #define QTIMED_COMPARE(lhs, rhs) do { \ @@ -1491,7 +1492,21 @@ void tst_qquickanimations::scriptActionCrash() delete obj; } +// QTBUG-49364 +// Test that we don't crash when the target of an Animator becomes +// invalid between the time the animator is started and the time the +// animator job is actually started +void tst_qquickanimations::animatorInvalidTargetCrash() +{ + QQmlEngine engine; + QQmlComponent c(&engine, testFileUrl("animatorInvalidTargetCrash.qml")); + QObject *obj = c.create(); + //just testing that we don't crash + QTest::qWait(5000); //animator duration + + delete obj; +} QTEST_MAIN(tst_qquickanimations) |