summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2020-01-27 10:54:01 +0000
committerMike Krus <mike.krus@kdab.com>2020-01-27 11:05:12 +0000
commit650d065d3b03825ff97600902c164d447cbb771a (patch)
treeaa3aec39323c658c1e0f4b4f2e5c04a09ce9cfd6 /src
parentdf5a63b059956e8a717db9110327cc86612cc934 (diff)
Fix potential crash when logic aspect exits
Logic aspect does work in response to posted event. By that time the aspect may be gone (due to normal shutdown) and the scene pointer be invalid. Change-Id: Ia9454532a7c95cd3c00e8b225b8d95c178471a67 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/logic/executor.cpp4
-rw-r--r--src/logic/qlogicaspect.cpp1
2 files changed, 4 insertions, 1 deletions
diff --git a/src/logic/executor.cpp b/src/logic/executor.cpp
index 1c428db47..41d2f2e31 100644
--- a/src/logic/executor.cpp
+++ b/src/logic/executor.cpp
@@ -89,7 +89,9 @@ bool Executor::event(QEvent *e)
*/
void Executor::processLogicFrameUpdates(float dt)
{
- Q_ASSERT(m_scene);
+ if (!m_scene || m_nodeIds.isEmpty())
+ return;
+
const QVector<QNode *> nodes = m_scene->lookupNodes(m_nodeIds);
for (QNode *node : nodes) {
QFrameAction *frameAction = qobject_cast<QFrameAction *>(node);
diff --git a/src/logic/qlogicaspect.cpp b/src/logic/qlogicaspect.cpp
index 649a14f25..c4459a84d 100644
--- a/src/logic/qlogicaspect.cpp
+++ b/src/logic/qlogicaspect.cpp
@@ -84,6 +84,7 @@ void QLogicAspectPrivate::onEngineAboutToShutdown()
// Throw away any pending work that may deadlock during the shutdown procedure
// when the main thread waits for any queued jobs to finish.
m_executor->clearQueueAndProceed();
+ m_executor->setScene(nullptr);
}
void QLogicAspectPrivate::registerBackendTypes()