summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChristian Andersen <csandersen3@gmail.com>2018-12-11 17:53:37 +0100
committerChristian Andersen <csandersen3@gmail.com>2019-01-06 10:42:16 +0000
commit6385ec6686467112256d68146d608c77fac9cea2 (patch)
tree92eae5e0beb5a27acc8718e78e128952551ff45e /tests
parent535f71053d3ca193666d7583f1961280d50da9f5 (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')
-rw-r--r--tests/auto/render/qrendercapture/tst_qrendercapture.cpp19
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)