(__lll_robust_lock_wait): Also set FUTEX_WAITERS buit if we got the mutex. (__lll_robust_timedlock_wait): Likewise.
This commit is contained in:
parent
c99445f897
commit
42b6ddfca5
|
@ -74,6 +74,7 @@ __lll_robust_mutex_lock_wait:
|
||||||
jne 4b
|
jne 4b
|
||||||
|
|
||||||
movl %gs:TID, %edx
|
movl %gs:TID, %edx
|
||||||
|
orl $FUTEX_WAITERS, %edx
|
||||||
LOCK
|
LOCK
|
||||||
cmpxchgl %edx, (%ebx)
|
cmpxchgl %edx, (%ebx)
|
||||||
jnz 4b
|
jnz 4b
|
||||||
|
@ -163,6 +164,7 @@ __lll_robust_mutex_timedlock_wait:
|
||||||
jne 7f
|
jne 7f
|
||||||
|
|
||||||
movl %gs:TID, %edx
|
movl %gs:TID, %edx
|
||||||
|
orl $FUTEX_WAITERS, %edx
|
||||||
LOCK
|
LOCK
|
||||||
cmpxchgl %edx, (%ebx)
|
cmpxchgl %edx, (%ebx)
|
||||||
jnz 7f
|
jnz 7f
|
||||||
|
|
|
@ -42,7 +42,9 @@ __lll_robust_lock_wait (int *futex)
|
||||||
|
|
||||||
lll_futex_wait (futex, newval);
|
lll_futex_wait (futex, newval);
|
||||||
}
|
}
|
||||||
while ((oldval = atomic_compare_and_exchange_val_acq (futex, tid, 0)) != 0);
|
while ((oldval = atomic_compare_and_exchange_val_acq (futex,
|
||||||
|
tid | FUTEX_WAITERS,
|
||||||
|
0)) != 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +91,7 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime)
|
||||||
|
|
||||||
lll_futex_timed_wait (futex, newval, &rt);
|
lll_futex_timed_wait (futex, newval, &rt);
|
||||||
}
|
}
|
||||||
while (atomic_compare_and_exchange_bool_acq (futex, tid, 0));
|
while (atomic_compare_and_exchange_bool_acq (futex, tid | FUTEX_WAITERS, 0));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue