summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2017-03-14 09:10:15 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-04-05 14:51:17 +0000
commit6729e2cf8ed26c4087b700cf883a379594d6b78f (patch)
tree3bf8b90c0a1b7c7f2fe2342c44f02b67d6a07cb5
parentf911323cfb648138c65c02b538ffe42fded19f6b (diff)
Fix crash in rendercapture-cpp
The completed signal can deallocate the RenderCaptureReply, which causes the deprecated signal call to crash. Add Weak pointer to the reply to detect this and call the signal only if the reply is still valid. Change-Id: Ib0324fb3637bb1cad3e17b0e7cc47a8be67b9319 Reviewed-by: Juan José Casafranca Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/framegraph/qrendercapture.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/render/framegraph/qrendercapture.cpp b/src/render/framegraph/qrendercapture.cpp
index 2c513fe1f..6576fdac3 100644
--- a/src/render/framegraph/qrendercapture.cpp
+++ b/src/render/framegraph/qrendercapture.cpp
@@ -40,6 +40,8 @@
#include <Qt3DCore/QPropertyUpdatedChange>
#include <Qt3DRender/qframegraphnodecreatedchange.h>
+#include <QPointer>
+
QT_BEGIN_NAMESPACE
namespace Qt3DRender {
@@ -301,14 +303,14 @@ void QRenderCapture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change)
if (propertyChange->type() == Qt3DCore::PropertyUpdated) {
if (propertyChange->propertyName() == QByteArrayLiteral("renderCaptureData")) {
RenderCaptureDataPtr data = propertyChange->value().value<RenderCaptureDataPtr>();
- QRenderCaptureReply *reply = d->takeReply(data.data()->captureId);
+ QPointer<QRenderCaptureReply> reply = d->takeReply(data.data()->captureId);
if (reply) {
d->setImage(reply, data.data()->image);
emit reply->completed();
-
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
- emit reply->completeChanged(true);
+ if (reply)
+ emit reply->completeChanged(true);
QT_WARNING_POP
}
}