From 3314694004b825263c9b9f2d69bd85da806ccbbc Mon Sep 17 00:00:00 2001 From: Christian Andersen Date: Sat, 20 Oct 2018 22:48:11 +0200 Subject: Fix crash due to racecondition in renderer on shutdown Protects access to m_renderQueue using the m_renderQueue mutex on shutdown. When a Qt3DWindow is deleted it signals the aspect thread to do early cleanup, the aspect thread calls Renderer::shutdown which in turn resets m_renderQueue. Meanwhile the render thread may be working on m_renderQueue, this leads to a double free of the front render view in m_renderQueue (and potentially other stuff). Fixes: QTBUG-69877 Change-Id: Ifd018597dbdb2f1538494932c907c63e8db9c715 Reviewed-by: Paul Lemire --- src/render/renderers/opengl/renderer/renderer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp index e1d237622..8039b6412 100644 --- a/src/render/renderers/opengl/renderer/renderer.cpp +++ b/src/render/renderers/opengl/renderer/renderer.cpp @@ -106,6 +106,7 @@ #include #include #include +#include #include #include #include @@ -444,8 +445,10 @@ void Renderer::shutdown() // We delete any renderqueue that we may not have had time to render // before the surface was destroyed + QMutexLocker lockRenderQueue(m_renderQueue->mutex()); qDeleteAll(m_renderQueue->nextFrameQueue()); m_renderQueue->reset(); + lockRenderQueue.unlock(); m_commandThread->shutdown(); -- cgit v1.2.3