src/corelib/thread/qmutex.h
changeset 30 5dc02b23752f
parent 19 fcece45ef507
--- 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<quintptr>(m))
     {
-        Q_ASSERT_X((val & quintptr(1u)) == quintptr(0),
+        Q_ASSERT_X((reinterpret_cast<quintptr>(m) & quintptr(1u)) == quintptr(0),
                    "QMutexLocker", "QMutex pointer is misaligned");
-        relock();
+        if (m) {
+            m->lock();
+            val = reinterpret_cast<quintptr>(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();
         }
     }