From c00f1090b2287d345e83699d6b414336227aaf91 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> Date: Thu, 11 Feb 2016 13:19:08 +0200 Subject: [PATCH] Fix texture using application crash at shutdown MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Depending on order things are destroyed at shutdown, texture factory can get deleted before textures at shutdown. Textures notify factory at their destructor, which caused the crash. Changed factory pointer to a guarded one to avoid this. Change-Id: I032f066a9a77ef92c68c31e0552f880a8f0a90af Task-number: QTBUG-51045 Reviewed-by: Pasi Keränen <pasi.keranen@theqtcompany.com> --- src/imports/qtcanvas3d/teximage3d.cpp | 5 +++-- src/imports/qtcanvas3d/teximage3d_p.h | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/imports/qtcanvas3d/teximage3d.cpp b/src/imports/qtcanvas3d/teximage3d.cpp index 652e8c2..8528d15 100644 --- a/src/imports/qtcanvas3d/teximage3d.cpp +++ b/src/imports/qtcanvas3d/teximage3d.cpp @@ -198,7 +198,7 @@ void CanvasTextureImage::cleanupNetworkReply() CanvasTextureImage::~CanvasTextureImage() { - if (m_parentFactory) + if (!m_parentFactory.isNull()) m_parentFactory->handleImageDestroyed(this); cleanupNetworkReply(); delete[] m_pixelCache; @@ -257,7 +257,8 @@ void CanvasTextureImage::load() return; setImageState(LOADING); - m_parentFactory->handleImageLoadingStarted(this); + if (!m_parentFactory.isNull()) + m_parentFactory->handleImageLoadingStarted(this); emit imageLoadingStarted(this); QNetworkRequest request(m_source); diff --git a/src/imports/qtcanvas3d/teximage3d_p.h b/src/imports/qtcanvas3d/teximage3d_p.h index 6789a2e..59bd0d6 100644 --- a/src/imports/qtcanvas3d/teximage3d_p.h +++ b/src/imports/qtcanvas3d/teximage3d_p.h @@ -51,6 +51,7 @@ #include "abstractobject3d_p.h" #include <QtCore/QUrl> +#include <QtCore/QPointer> #include <QtGui/QImage> #include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkReply> @@ -159,7 +160,7 @@ private: bool m_pixelCacheFlipY; QImage m_glImage; QVariant *m_anyValue; - CanvasTextureImageFactory *m_parentFactory; + QPointer<CanvasTextureImageFactory> m_parentFactory; }; QT_CANVAS3D_END_NAMESPACE -- GitLab