From 07000c8bfc8bdd52cb52157bc61c9aaead124da4 Mon Sep 17 00:00:00 2001 From: Andy Nichols Date: Fri, 9 Sep 2022 08:19:01 +0200 Subject: [PATCH] Make sure that RenderStats is deleted at a safe time We have to wait until the render thread is destroyed before deleting the RenderStats object. --- src/quick3d/qquick3dviewport.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/quick3d/qquick3dviewport.cpp b/src/quick3d/qquick3dviewport.cpp index 8294207f..709bf919 100644 --- a/src/quick3d/qquick3dviewport.cpp +++ b/src/quick3d/qquick3dviewport.cpp @@ -95,7 +95,7 @@ QQuick3DViewport::QQuick3DViewport(QQuickItem *parent) m_camera = nullptr; m_sceneRoot = new QQuick3DSceneRootNode(this); m_environment = new QQuick3DSceneEnvironment(m_sceneRoot); - m_renderStats = new QQuick3DRenderStats(m_sceneRoot); + m_renderStats = new QQuick3DRenderStats(); QSharedPointer sceneManager(new QQuick3DSceneManager(m_sceneRoot)); QQuick3DObjectPrivate::get(m_sceneRoot)->refSceneManager(sceneManager); connect(QQuick3DObjectPrivate::get(m_sceneRoot)->sceneManager.data(), &QQuick3DSceneManager::needsUpdate, @@ -111,6 +111,10 @@ QQuick3DViewport::~QQuick3DViewport() if (sceneManager) sceneManager->setParent(nullptr); delete m_sceneRoot; + + // m_renderStats is tightly coupled with the render thread, so can't delete while we + // might still be rendering. + m_renderStats->deleteLater(); } static void ssgn_append(QQmlListProperty *property, QObject *obj) -- 2.32.1 (Apple Git-133)