diff options
author | Fredrik Orderud <forderud@gmail.com> | 2016-10-25 20:22:22 +0200 |
---|---|---|
committer | Fredrik Orderud <forderud@gmail.com> | 2016-11-02 11:37:59 +0000 |
commit | 99f45a690e3ad850f7940b5c21aa13192ef1d8c1 (patch) | |
tree | 0c1d7a22fd08ddc011fe91aedc9e0a2bc102cbce | |
parent | d59d585bea2464b31794f9ea1a8c1ebbf909b301 (diff) |
Fix crash in Scene3DRenderer::shutdown caused by nullptr m_aspectEngine
Crash occurs at teardown when using Qt3D inside an ActiveQt application.
This triggers the following call sequence:
1: Scene3DCleaner::cleanup is called from the QWindow destructor. This
causes m_aspectEngine to be deleted.
2: Scene3DRenderer::shutdown is later called when processing
DeferredDelete events. This method crashes when attempting to
dereference the now nullptr m_aspectEngine member.
Change-Id: I03bd85f2b7ad3e298b23396284624cbccf88b4e0
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/quick3d/imports/scene3d/scene3drenderer.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/quick3d/imports/scene3d/scene3drenderer.cpp b/src/quick3d/imports/scene3d/scene3drenderer.cpp index 86f8a7681..326ba0c8f 100644 --- a/src/quick3d/imports/scene3d/scene3drenderer.cpp +++ b/src/quick3d/imports/scene3d/scene3drenderer.cpp @@ -183,8 +183,10 @@ void Scene3DRenderer::shutdown() // Exit the simulation loop so no more jobs are asked for. Once this // returns it is safe to shutdown the renderer. - auto engineD = Qt3DCore::QAspectEnginePrivate::get(m_aspectEngine); - engineD->exitSimulationLoop(); + if (m_aspectEngine) { + auto engineD = Qt3DCore::QAspectEnginePrivate::get(m_aspectEngine); + engineD->exitSimulationLoop(); + } // Shutdown the Renderer Aspect while the OpenGL context // is still valid |