summaryrefslogtreecommitdiffstats
path: root/src/core/qchangearbiter.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2014-07-16 15:14:16 +0200
committerSean Harmer <sean.harmer@kdab.com>2014-07-20 00:18:50 +0200
commit0f0bf28b05e5d08767aa98f83dc6d5c898cdcc17 (patch)
treedc3d5505057b900981d6d0d8c54ef90547391104 /src/core/qchangearbiter.cpp
parentc38954f6e6721f9129fe854512bbfdee9fe94546 (diff)
Ground work to have a proper shutdown
QAspectEngine shutdown invokes QAspectManager quit which will stop the QAspectThread. Prior to exiting, the QAspectThread calls QAspectManager shutdown which cleans up all aspects and deletes them. Renderer stops the RenderThread when cleanup is called and properly deletes the QGraphicContext and the RenderThread. Note: Everything is called as it should. However it always ends up in a segfault caused by the QFont::cleanup when the QThreadStorage of the main thread GuiApplication is destroyed. I've not been able to find the cause of that. Change-Id: I3b7baa843af4d0418b5d04e6d1cda88b962ded7f Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/core/qchangearbiter.cpp')
-rw-r--r--src/core/qchangearbiter.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/core/qchangearbiter.cpp b/src/core/qchangearbiter.cpp
index 3001ea65b..975ee1412 100644
--- a/src/core/qchangearbiter.cpp
+++ b/src/core/qchangearbiter.cpp
@@ -76,6 +76,15 @@ QChangeArbiter::QChangeArbiter(QObject *parent)
// 6) Mutex is unlocked - leaving SyncChanges
}
+QChangeArbiter::~QChangeArbiter()
+{
+ Q_D(QChangeArbiter);
+ if (d->m_jobManager != Q_NULLPTR)
+ d->m_jobManager->waitForPerThreadFunction(QChangeArbiter::destroyThreadLocalChangeQueue, this);
+ d->m_lockingChangeQueues.clear();
+ d->m_changeQueues.clear();
+}
+
QChangeArbiter::QChangeArbiter(QChangeArbiterPrivate &dd, QObject *parent)
: QObject(dd, parent)
@@ -262,7 +271,7 @@ void QChangeArbiter::createUnmanagedThreadLocalChangeQueue(void *changeArbiter)
}
}
-static void destroyUnmanagedThreadLocalChangeQueue(void *changeArbiter)
+void QChangeArbiter::destroyUnmanagedThreadLocalChangeQueue(void *changeArbiter)
{
// TODO: Implement me!
Q_UNUSED(changeArbiter);
@@ -282,7 +291,7 @@ void QChangeArbiter::createThreadLocalChangeQueue(void *changeArbiter)
}
}
-static void destroyThreadLocalChangeQueue(void *changeArbiter)
+void QChangeArbiter::destroyThreadLocalChangeQueue(void *changeArbiter)
{
// TODO: Implement me!
Q_UNUSED(changeArbiter);