diff options
author | Bradley T. Hughes <bradley.hughes@nokia.com> | 2010-04-15 11:55:38 (GMT) |
---|---|---|
committer | Bradley T. Hughes <bradley.hughes@nokia.com> | 2010-04-16 05:50:59 (GMT) |
commit | 13ca61fcfdc53a6a06ae6f409ae0d9e17919336c (patch) | |
tree | 03fd7ab1974c629dbbf5b663c826a5b7bd469650 /tests/auto/qthread | |
parent | 2913a71672a6cbe3022e167cf9d318beb2f29ee3 (diff) | |
download | Qt-13ca61fcfdc53a6a06ae6f409ae0d9e17919336c.zip Qt-13ca61fcfdc53a6a06ae6f409ae0d9e17919336c.tar.gz Qt-13ca61fcfdc53a6a06ae6f409ae0d9e17919336c.tar.bz2 |
Fix tst_QEventLoop::exec() regression introduced by commit 816523117bc00cfeb17e347f7fe5f11278a5e871
The quitNow flag needs to be reset at the beginning of exec() to allow
exec() to recurse and be run multiple times.
This changes reverts commit 816523117bc00cfeb17e347f7fe5f11278a5e871 an
introduces the QThreadPrivate::exited flag to fix the race between
start() and exit(), and QThreadPrivate::returnCode to make sure exec()
returns the code passed to exit().
Task-number: QTBUG-1184
Reviewed-by: olivier
Diffstat (limited to 'tests/auto/qthread')
-rw-r--r-- | tests/auto/qthread/tst_qthread.cpp | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/tests/auto/qthread/tst_qthread.cpp b/tests/auto/qthread/tst_qthread.cpp index 871578e..9a4397e 100644 --- a/tests/auto/qthread/tst_qthread.cpp +++ b/tests/auto/qthread/tst_qthread.cpp @@ -174,8 +174,8 @@ public: void run() { + Simple_Thread::run(); if (object) { - Simple_Thread::run(); object->thread = this; object->code = code; QTimer::singleShot(100, object, SLOT(slot())); @@ -218,8 +218,8 @@ public: void run() { + Simple_Thread::run(); if (object) { - Simple_Thread::run(); object->thread = this; QTimer::singleShot(100, object, SLOT(slot())); } @@ -443,22 +443,24 @@ void tst_QThread::exit() thread2.code = 53; thread2.result = 0; thread2.start(); - thread2.exit(thread.code); + thread2.exit(thread2.code); + QMutexLocker locker2(&thread2.mutex); + thread2.cond.wait(locker2.mutex()); QVERIFY(thread2.wait(five_minutes)); - QCOMPARE(thread.result, thread.code); + QCOMPARE(thread2.result, thread2.code); } void tst_QThread::start() { QThread::Priority priorities[] = { - QThread::IdlePriority, - QThread::LowestPriority, - QThread::LowPriority, - QThread::NormalPriority, - QThread::HighPriority, - QThread::HighestPriority, - QThread::TimeCriticalPriority, - QThread::InheritPriority + QThread::IdlePriority, + QThread::LowestPriority, + QThread::LowPriority, + QThread::NormalPriority, + QThread::HighPriority, + QThread::HighestPriority, + QThread::TimeCriticalPriority, + QThread::InheritPriority }; const int prio_count = sizeof(priorities) / sizeof(QThread::Priority); @@ -514,8 +516,10 @@ void tst_QThread::quit() thread2.result = -1; thread2.start(); thread2.quit(); + QMutexLocker locker2(&thread2.mutex); + thread2.cond.wait(locker2.mutex()); QVERIFY(thread2.wait(five_minutes)); - QCOMPARE(thread.result, 0); + QCOMPARE(thread2.result, 0); } void tst_QThread::wait() @@ -692,7 +696,7 @@ void NativeThreadWrapper::start(FunctionPointer functionPointer, void *data) const int state = pthread_create(&nativeThreadHandle, 0, NativeThreadWrapper::runUnix, this); Q_UNUSED(state); #elif defined(Q_OS_WINCE) - nativeThreadHandle = CreateThread(NULL, 0 , (LPTHREAD_START_ROUTINE)NativeThreadWrapper::runWin , this, 0, NULL); + nativeThreadHandle = CreateThread(NULL, 0 , (LPTHREAD_START_ROUTINE)NativeThreadWrapper::runWin , this, 0, NULL); #elif defined Q_OS_WIN unsigned thrdid = 0; nativeThreadHandle = (Qt::HANDLE) _beginthreadex(NULL, 0, NativeThreadWrapper::runWin, this, 0, &thrdid); |