summaryrefslogtreecommitdiffstats
path: root/src/core/aspects/qaspectmanager.cpp
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2016-05-16 13:19:44 +0100
committerSean Harmer <sean.harmer@kdab.com>2016-05-18 15:57:01 +0000
commita408665a90d00a8ef8f59fe75c1547fad7264963 (patch)
tree60d9bb81a3d39d56f890fdfe65caeebea770ef8f /src/core/aspects/qaspectmanager.cpp
parent662be35bc6e288a25756eb2ee87349f099e7a8a7 (diff)
Unregister aspects when shutting down
This allows the aspect manager to call QAbstractAspect::onUnregistered() in a symmetric way to onRegistered() before we exit the aspect manager's main loop. In particular, this allows the render aspect a chance to cleanly shutdown the renderer submission thread. Task-number: QTBUG-51035 Change-Id: I38a2f3d4fa016f451e53f0ceac02c387911aa6c4 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core/aspects/qaspectmanager.cpp')
-rw-r--r--src/core/aspects/qaspectmanager.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/core/aspects/qaspectmanager.cpp b/src/core/aspects/qaspectmanager.cpp
index 9df1112b0..d565848a8 100644
--- a/src/core/aspects/qaspectmanager.cpp
+++ b/src/core/aspects/qaspectmanager.cpp
@@ -196,6 +196,26 @@ void QAspectManager::registerAspect(QAbstractAspect *aspect)
qCDebug(Aspects) << "Completed registering aspect";
}
+/*!
+ * \internal
+ *
+ * Calls QAbstractAspect::onUnregistered(), unregisters the aspect from the
+ * change arbiter and unsets the arbiter, job manager and aspect manager.
+ * Operations are performed in the reverse order to registerAspect.
+ */
+void QAspectManager::unregisterAspect(Qt3DCore::QAbstractAspect *aspect)
+{
+ qCDebug(Aspects) << "Unregistering aspect";
+ Q_ASSERT(aspect);
+ aspect->onUnregistered();
+ m_changeArbiter->unregisterSceneObserver(aspect->d_func());
+ QAbstractAspectPrivate::get(aspect)->m_arbiter = nullptr;
+ QAbstractAspectPrivate::get(aspect)->m_jobManager = nullptr;
+ QAbstractAspectPrivate::get(aspect)->m_aspectManager = nullptr;
+ m_aspects.removeOne(aspect);
+ qCDebug(Aspects) << "Completed unregistering aspect";
+}
+
void QAspectManager::exec()
{
// Gentlemen, start your engines