QSemaphore: move suspect increment of waiter count
We might return false a few lines down, without decreasing the count. Change-Id: I0a90c07f279860987e41539e9d5f3b5d2cb15207 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
c87847db87
commit
9211d04730
@ -246,13 +246,13 @@ template <bool IsTimed> bool futexSemaphoreTryAcquire(QBasicAtomicInteger<quintp
|
|||||||
// we need to wait
|
// we need to wait
|
||||||
quintptr oneWaiter = quintptr(Q_UINT64_C(1) << 32); // zero on 32-bit
|
quintptr oneWaiter = quintptr(Q_UINT64_C(1) << 32); // zero on 32-bit
|
||||||
if (futexHasWaiterCount) {
|
if (futexHasWaiterCount) {
|
||||||
// increase the waiter count
|
|
||||||
u.fetchAndAddRelaxed(oneWaiter);
|
|
||||||
|
|
||||||
// We don't use the fetched value from above so futexWait() fails if
|
// We don't use the fetched value from above so futexWait() fails if
|
||||||
// it changed after the testAndSetOrdered above.
|
// it changed after the testAndSetOrdered above.
|
||||||
if ((quint64(curValue) >> 32) == 0x7fffffff)
|
if ((quint64(curValue) >> 32) == 0x7fffffff)
|
||||||
return false; // overflow!
|
return false; // overflow!
|
||||||
|
|
||||||
|
// increase the waiter count
|
||||||
|
u.fetchAndAddRelaxed(oneWaiter);
|
||||||
curValue += oneWaiter;
|
curValue += oneWaiter;
|
||||||
|
|
||||||
// Also adjust nn to subtract oneWaiter when we succeed in acquiring.
|
// Also adjust nn to subtract oneWaiter when we succeed in acquiring.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user