diff options
author | Antti Määttä <antti.maatta@qt.io> | 2017-03-14 09:10:15 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-04-05 14:51:17 +0000 |
commit | 6729e2cf8ed26c4087b700cf883a379594d6b78f (patch) | |
tree | 3bf8b90c0a1b7c7f2fe2342c44f02b67d6a07cb5 | |
parent | f911323cfb648138c65c02b538ffe42fded19f6b (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.cpp | 8 |
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 } } |