From 5344d87197c83feb7d00931a6756eea870be953c Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Thu, 8 Aug 2019 14:25:59 +0200 Subject: RenderSettings: only destroy the RenderSettings component that is used Since we only create a backend node for the first RenderSettings component that is inserted in the scene, we should only destroy that instance. Otherwise, in the case we have several QRenderSettings components in a scene, if one of them gets destroyed we might end up destroying the RenderSettings instanced actually used by the Renderer. We so far assumed there would only be a single QRenderSettings per application but introducing Scene3DView might change that. Change-Id: Ibef1328253b871f3b40a2298ccd8504130d75d86 Reviewed-by: Mike Krus --- src/render/backend/rendersettings.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/render/backend/rendersettings.cpp b/src/render/backend/rendersettings.cpp index 96c90f20d..2b8067ce8 100644 --- a/src/render/backend/rendersettings.cpp +++ b/src/render/backend/rendersettings.cpp @@ -131,8 +131,10 @@ void RenderSettingsFunctor::destroy(Qt3DCore::QNodeId id) const Q_UNUSED(id); // Deletes the old settings object auto settings = m_renderer->settings(); - delete settings; - m_renderer->setSettings(nullptr); + if (settings && settings->peerId() == id) { + m_renderer->setSettings(nullptr); + delete settings; + } } } // namespace Render -- cgit v1.2.3