diff options
author | João Abecasis <joao.abecasis@nokia.com> | 2010-12-02 12:13:07 (GMT) |
---|---|---|
committer | João Abecasis <joao.abecasis@nokia.com> | 2010-12-02 12:13:07 (GMT) |
commit | 655bae506d4d2743ed016c78a767afa2150057a9 (patch) | |
tree | 9ccc2b4a56792616a2c48045faa9bd7081126167 /src/corelib/thread/qthread.cpp | |
parent | 16252a59afa58b0cb4b0ffb02a330dcf002c9750 (diff) | |
parent | f6f8ba94d5f82b8df723a217a3d0ecb50e570cbc (diff) | |
download | Qt-655bae506d4d2743ed016c78a767afa2150057a9.zip Qt-655bae506d4d2743ed016c78a767afa2150057a9.tar.gz Qt-655bae506d4d2743ed016c78a767afa2150057a9.tar.bz2 |
Merge remote branch 'origin/master' into file-engine-refactor
master's version of conflicting def files picked.
Conflicts:
src/s60installs/bwins/QtCoreu.def
src/s60installs/bwins/QtGuiu.def
src/s60installs/bwins/QtNetworku.def
src/s60installs/eabi/QtCoreu.def
src/s60installs/eabi/QtGuiu.def
Diffstat (limited to 'src/corelib/thread/qthread.cpp')
-rw-r--r-- | src/corelib/thread/qthread.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp index 69b70cb..c9ff8d3 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -173,7 +173,8 @@ void QAdoptedThread::run() */ QThreadPrivate::QThreadPrivate(QThreadData *d) - : QObjectPrivate(), running(false), finished(false), terminated(false), exited(false), returnCode(-1), + : QObjectPrivate(), running(false), finished(false), terminated(false), + isInFinish(false), exited(false), returnCode(-1), stackSize(0), priority(QThread::InheritPriority), data(d) { #if defined (Q_OS_UNIX) @@ -403,6 +404,11 @@ QThread::~QThread() Q_D(QThread); { QMutexLocker locker(&d->mutex); + if (d->isInFinish) { + locker.unlock(); + wait(); + locker.relock(); + } if (d->running && !d->finished) qWarning("QThread: Destroyed while thread is still running"); @@ -482,8 +488,10 @@ int QThread::exec() Q_D(QThread); QMutexLocker locker(&d->mutex); d->data->quitNow = false; - if (d->exited) + if (d->exited) { + d->exited = false; return d->returnCode; + } locker.unlock(); QEventLoop eventLoop; |