diff -r b72c6db6890b -r 5dc02b23752f src/corelib/thread/qmutex.h --- a/src/corelib/thread/qmutex.h Wed Jun 23 19:07:03 2010 +0300 +++ b/src/corelib/thread/qmutex.h Tue Jul 06 15:10:48 2010 +0300 @@ -95,21 +95,23 @@ { public: inline explicit QMutexLocker(QMutex *m) - : val(reinterpret_cast(m)) { - Q_ASSERT_X((val & quintptr(1u)) == quintptr(0), + Q_ASSERT_X((reinterpret_cast(m) & quintptr(1u)) == quintptr(0), "QMutexLocker", "QMutex pointer is misaligned"); - relock(); + if (m) { + m->lock(); + val = reinterpret_cast(m) | quintptr(1u); + } else { + val = 0; + } } inline ~QMutexLocker() { unlock(); } inline void unlock() { - if (val) { - if ((val & quintptr(1u)) == quintptr(1u)) { - val &= ~quintptr(1u); - mutex()->unlock(); - } + if ((val & quintptr(1u)) == quintptr(1u)) { + val &= ~quintptr(1u); + mutex()->unlock(); } }