diff --git a/src/arraybuffer.cpp b/src/arraybuffer.cpp index 3b35b7cc0162eab0c7fdef47e4ee588d4ebeaa0f..f35d8ec42c9826085c68bb3b72f4259ac371ef97 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 39b458afe9df01124b064682c7ef179da3422412..e161522eaa0ab7a8fa10ecfc38380a50f90bbca4 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 a82277cd91b856e500f0b0a88076005f4212c43d..c05fc8a4c1f01fc003a28aab6deab1821fffc02f 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 601e3184895f7637e4c56ee36c14936408edcabd..e9836c802d8095a36ff03087de0d13e6211575c2 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); } /*!