diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-05-16 13:19:44 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-05-18 15:57:01 +0000 |
commit | a408665a90d00a8ef8f59fe75c1547fad7264963 (patch) | |
tree | 60d9bb81a3d39d56f890fdfe65caeebea770ef8f /src/core/aspects/qaspectmanager.cpp | |
parent | 662be35bc6e288a25756eb2ee87349f099e7a8a7 (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.cpp | 20 |
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 |