summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qeventdispatcher_symbian.cpp
diff options
context:
space:
mode:
authorMurray Read <ext-murray.2.read@nokia.com>2012-06-18 15:43:19 (GMT)
committerQt by Nokia <qt-info@nokia.com>2012-06-21 09:21:28 (GMT)
commit1f9168d3839b2081572368b786c263a04955337c (patch)
tree6aa26d42e9df43f3a4ec5b0ea0880fd325e58e1e /src/corelib/kernel/qeventdispatcher_symbian.cpp
parent4093ae7ae38f6006f7f8c1438e89777144a0c10b (diff)
downloadQt-1f9168d3839b2081572368b786c263a04955337c.zip
Qt-1f9168d3839b2081572368b786c263a04955337c.tar.gz
Qt-1f9168d3839b2081572368b786c263a04955337c.tar.bz2
Removing potential crashes from out-of-thread cleanup on Symbian
There have been some crashes seen on Symbian when its adoptedThreadMonitor attempts to clean up objects created in other, now dead, threads. Some of these objects simply can't be cleaned up properly outside of their original thread, so the thread has to be checked when they are cleaned up, and cleanup skipped in the wrong thread. For pthread created threads, we also have the ability to insert cleanup code during thread shutdown. This was used in the 4.7 implementation of QThread on Symbian, and is a better solution for pthread based adopted threads as it gives in-thread cleanup. So the appropriate pthread code is also used with changes to adoptedThreadMonitor so that it can run along side the pthread cleanup code. Change-Id: Iad8207879b1ece62e5cce85f26a616166aa22486 Reviewed-by: Juha Kukkonen <ext-juha.kukkonen@nokia.com> Reviewed-by: Pasi Pentikäinen <ext-pasi.a.pentikainen@nokia.com>
Diffstat (limited to 'src/corelib/kernel/qeventdispatcher_symbian.cpp')
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp
index a4c113b..c26166b 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian.cpp
+++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp
@@ -1041,7 +1041,8 @@ void QEventDispatcherSymbian::closingDown()
delete m_completeDeferredAOs;
delete m_wakeUpAO;
- if (m_activeScheduler) {
+ // only delete the active scheduler in its own thread
+ if (m_activeScheduler && QThread::currentThread() == thread()) {
delete m_activeScheduler;
}
}