Check value of futex before updating in __lll_timedlock

2014-08-12  Bernard Ogden  <bernie.ogden@linaro.org>

	[BZ #16892]
	* sysdeps/nptl/lowlevellock.h (__lll_timedlock): Use
	atomic_compare_and_exchange_bool_acq rather than atomic_exchange_acq.
This commit is contained in:
Bernard Ogden 2014-08-11 15:26:48 +01:00 committed by Will Newton
parent bb2ce41656
commit 4e75751cbb
2 changed files with 10 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2014-08-12 Bernard Ogden <bernie.ogden@linaro.org>
[BZ #16892]
* sysdeps/nptl/lowlevellock.h (__lll_timedlock): Use
atomic_compare_and_exchange_bool_acq rather than atomic_exchange_acq.
2014-08-12 Sean Anderson <seanga2@gmail.com>
* malloc/malloc.c: Fix typo in comment.

View File

@ -88,12 +88,15 @@ extern int __lll_timedlock_wait (int *futex, const struct timespec *,
extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *,
int private) attribute_hidden;
/* Take futex if it is untaken.
Otherwise block until either we get the futex or abstime runs out. */
#define __lll_timedlock(futex, abstime, private) \
({ \
int *__futex = (futex); \
int __val = 0; \
\
if (__glibc_unlikely (atomic_exchange_acq (__futex, 1))) \
if (__glibc_unlikely \
(atomic_compare_and_exchange_bool_acq (__futex, 1, 0))) \
__val = __lll_timedlock_wait (__futex, abstime, private); \
__val; \
})