equal
deleted
inserted
replaced
93 |
93 |
94 class Q_CORE_EXPORT QMutexLocker |
94 class Q_CORE_EXPORT QMutexLocker |
95 { |
95 { |
96 public: |
96 public: |
97 inline explicit QMutexLocker(QMutex *m) |
97 inline explicit QMutexLocker(QMutex *m) |
98 : val(reinterpret_cast<quintptr>(m)) |
|
99 { |
98 { |
100 Q_ASSERT_X((val & quintptr(1u)) == quintptr(0), |
99 Q_ASSERT_X((reinterpret_cast<quintptr>(m) & quintptr(1u)) == quintptr(0), |
101 "QMutexLocker", "QMutex pointer is misaligned"); |
100 "QMutexLocker", "QMutex pointer is misaligned"); |
102 relock(); |
101 if (m) { |
|
102 m->lock(); |
|
103 val = reinterpret_cast<quintptr>(m) | quintptr(1u); |
|
104 } else { |
|
105 val = 0; |
|
106 } |
103 } |
107 } |
104 inline ~QMutexLocker() { unlock(); } |
108 inline ~QMutexLocker() { unlock(); } |
105 |
109 |
106 inline void unlock() |
110 inline void unlock() |
107 { |
111 { |
108 if (val) { |
112 if ((val & quintptr(1u)) == quintptr(1u)) { |
109 if ((val & quintptr(1u)) == quintptr(1u)) { |
113 val &= ~quintptr(1u); |
110 val &= ~quintptr(1u); |
114 mutex()->unlock(); |
111 mutex()->unlock(); |
|
112 } |
|
113 } |
115 } |
114 } |
116 } |
115 |
117 |
116 inline void relock() |
118 inline void relock() |
117 { |
119 { |