From 6385ec6686467112256d68146d608c77fac9cea2 Mon Sep 17 00:00:00 2001 From: Christian Andersen Date: Tue, 11 Dec 2018 17:53:37 +0100 Subject: QRenderCapture: Prevent crash on shutdown when replies are pending MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ä Reviewed-by: Paul Lemire --- .../auto/render/qrendercapture/tst_qrendercapture.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'tests/auto/render/qrendercapture') 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 #include +#include + #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 renderCapture(new Qt3DRender::QRenderCapture()); + QPointer renderCaptureReply(renderCapture->requestCapture()); + + // THEN + QVERIFY(renderCaptureReply); + + // WHEN + renderCapture.reset(); + + // THEN (Should not crash and delete reply) + QVERIFY(!renderCaptureReply); + } + }; QTEST_MAIN(tst_QRenderCapture) -- cgit v1.2.3