From 9521d02acd14fcb6be60ebb1d976e03d243dbf07 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> Date: Thu, 6 Nov 2014 15:42:50 +0200 Subject: [PATCH] Fix memory leaks and other related issues. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7fc9b0592beabc0b0e225bf1f161bdbeaa9dba00 Reviewed-by: Pasi Keränen <pasi.keranen@digia.com> --- src/arraybuffer.cpp | 2 +- src/canvas3d.cpp | 11 +++++------ src/canvasrendernode.cpp | 1 - src/teximage3d.cpp | 15 +++++++++++++++ 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/arraybuffer.cpp b/src/arraybuffer.cpp index 3b35b7c..f35d8ec 100644 --- a/src/arraybuffer.cpp +++ b/src/arraybuffer.cpp @@ -76,7 +76,7 @@ CanvasArrayBuffer::CanvasArrayBuffer(unsigned long length, QObject *parent) : */ CanvasArrayBuffer::~CanvasArrayBuffer() { - delete m_rawData; + delete[] m_rawData; } /*! diff --git a/src/canvas3d.cpp b/src/canvas3d.cpp index 39b458a..e161522 100644 --- a/src/canvas3d.cpp +++ b/src/canvas3d.cpp @@ -155,15 +155,14 @@ void Canvas::shutDown() if (m_logAllCalls) qDebug() << m_contextThread << m_mainThread; - if (m_contextThread && m_contextThread != m_mainThread) + if (m_contextThread && m_contextThread != m_mainThread) { m_glContext->deleteLater(); - else + m_offscreenSurface->deleteLater(); + } else { delete m_glContext; + delete m_offscreenSurface; + } m_glContext = 0; - - // schedule this to be deleted only after we're done cleaning up - m_offscreenSurface->deleteLater(); - m_glContextQt = 0; } diff --git a/src/canvasrendernode.cpp b/src/canvasrendernode.cpp index a82277c..c05fc8a 100644 --- a/src/canvasrendernode.cpp +++ b/src/canvasrendernode.cpp @@ -59,7 +59,6 @@ CanvasRenderNode::CanvasRenderNode(Canvas *canvas, QQuickWindow *window) : CanvasRenderNode::~CanvasRenderNode() { - if (m_canvas->logAllCalls()) qDebug() << "CanvasRenderNode::" << __FUNCTION__; delete m_texture; } diff --git a/src/teximage3d.cpp b/src/teximage3d.cpp index 601e318..e9836c8 100644 --- a/src/teximage3d.cpp +++ b/src/teximage3d.cpp @@ -38,9 +38,21 @@ #include "canvas3dcommon_p.h" #include <QJSValueIterator> +#include <QtQml/QQmlEngine> static QMap<QQmlEngine *,CanvasTextureImageFactory *>m_qmlEngineToImageFactoryMap; +class StaticFactoryMapDeleter +{ +public: + StaticFactoryMapDeleter() {} + ~StaticFactoryMapDeleter() { + foreach (CanvasTextureImageFactory *factory, m_qmlEngineToImageFactoryMap) + delete factory; + } +}; +static StaticFactoryMapDeleter staticFactoryMapDeleter; + /*! * \internal */ @@ -48,6 +60,9 @@ CanvasTextureImageFactory::CanvasTextureImageFactory(QQmlEngine *engine, QObject QObject(parent) { m_qmlEngine = engine; + + QObject::connect(engine, &QObject::destroyed, + this, &CanvasTextureImageFactory::deleteLater); } /*! -- GitLab