summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2017-01-29 10:32:42 +0000
committerSean Harmer <sean.harmer@kdab.com>2017-01-30 10:54:27 +0000
commit19847a8c247709a7b9825f494ede56aad7ed231f (patch)
tree0bcf9ba1eab021cd4ffb8de2f4980c159c0382b7
parent126a93f0cc06cc4339b2bf04798e09ecfd15bd82 (diff)
Shutdown fixes
Wait for render thread to finish when shutting down. Was causing crashes in some background nodes still being accessed after the node manager was destroyed. Shader disconnects from glcontext destroy messages when that context is reset. Thread affinity of glcontext and shader meant the destroyed signal from the glcontext could be delivered to a shader that had already been destroyed. Change-Id: I283701e8d008343b3fccf6769d71695b1c6a1ea4 Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/backend/renderer.cpp1
-rw-r--r--src/render/materialsystem/shader.cpp3
2 files changed, 2 insertions, 2 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp
index 1c8875b58..6928a2b1a 100644
--- a/src/render/backend/renderer.cpp
+++ b/src/render/backend/renderer.cpp
@@ -374,6 +374,7 @@ void Renderer::shutdown()
// to be ready. The isReadyToSubmit() function checks for a shutdown
// having been requested.
m_submitRenderViewsSemaphore.release(1);
+ m_renderThread->wait();
}
}
diff --git a/src/render/materialsystem/shader.cpp b/src/render/materialsystem/shader.cpp
index ae547836a..02f58dfbc 100644
--- a/src/render/materialsystem/shader.cpp
+++ b/src/render/materialsystem/shader.cpp
@@ -72,8 +72,6 @@ Shader::~Shader()
{
// TO DO: ShaderProgram is leaked as of now
// Fix that taking care that they may be shared given a same dna
-
- QObject::disconnect(m_contextConnection);
}
void Shader::cleanup()
@@ -85,6 +83,7 @@ void Shader::cleanup()
if (m_graphicsContext)
m_graphicsContext->removeShaderProgramReference(this);
m_graphicsContext = nullptr;
+ QObject::disconnect(m_contextConnection);
}
QBackendNode::setEnabled(false);