diff options
author | Christian Andersen <csandersen3@gmail.com> | 2018-12-11 17:53:37 +0100 |
---|---|---|
committer | Christian Andersen <csandersen3@gmail.com> | 2019-01-06 10:42:16 +0000 |
commit | 6385ec6686467112256d68146d608c77fac9cea2 (patch) | |
tree | 92eae5e0beb5a27acc8718e78e128952551ff45e /tests/auto | |
parent | 535f71053d3ca193666d7583f1961280d50da9f5 (diff) |
QRenderCapture: Prevent crash on shutdown when replies are pending
When a QRenderCapture is deleted its destructor runs, then the
QFrameGraphNode destructor, then the QNode destructor and finally the
QObject destructor. The QObject destructor deletes its QObjectPrivate
member, which destructs QRenderCapturePrivate. At that point the
QRenderCapturePrivate tries to disconnect on an invalid pointer to the
QRenderCapture (which was already deleted).
Change-Id: Ib5835e3f86a282b963220b0dab656258111a61ab
Reviewed-by: Antti Määttä <antti.maatta@qt.io>
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/render/qrendercapture/tst_qrendercapture.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/tests/auto/render/qrendercapture/tst_qrendercapture.cpp b/tests/auto/render/qrendercapture/tst_qrendercapture.cpp index b2144d500..2fab1e837 100644 --- a/tests/auto/render/qrendercapture/tst_qrendercapture.cpp +++ b/tests/auto/render/qrendercapture/tst_qrendercapture.cpp @@ -34,6 +34,8 @@ #include <Qt3DRender/QRenderCapture> #include <Qt3DRender/private/qrendercapture_p.h> +#include <QPointer> + #include "testpostmanarbiter.h" class MyRenderCapture : public Qt3DRender::QRenderCapture @@ -129,6 +131,23 @@ private Q_SLOTS: // THEN renderCapture->sceneChangeEvent(e); // Should not reset } + + void crashOnRenderCaptureDeletion() + { + // GIVEN + QScopedPointer<Qt3DRender::QRenderCapture> renderCapture(new Qt3DRender::QRenderCapture()); + QPointer<Qt3DRender::QRenderCaptureReply> renderCaptureReply(renderCapture->requestCapture()); + + // THEN + QVERIFY(renderCaptureReply); + + // WHEN + renderCapture.reset(); + + // THEN (Should not crash and delete reply) + QVERIFY(!renderCaptureReply); + } + }; QTEST_MAIN(tst_QRenderCapture) |