diff options
Diffstat (limited to 'sysdeps/nacl/lll_timedlock_wait.c')
-rw-r--r-- | sysdeps/nacl/lll_timedlock_wait.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/sysdeps/nacl/lll_timedlock_wait.c b/sysdeps/nacl/lll_timedlock_wait.c index df951ee8cb..1a41a6f6b4 100644 --- a/sysdeps/nacl/lll_timedlock_wait.c +++ b/sysdeps/nacl/lll_timedlock_wait.c @@ -36,17 +36,18 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime, int private) return EINVAL; /* Try locking. */ - int result = 0; while (atomic_exchange_acq (futex, 2) != 0) { /* If *futex == 2, wait until woken or timeout. */ - result = __nacl_irt_futex.futex_wait_abs ((volatile int *) futex, 2, - abstime); - if (__glibc_likely (result == 0) - || __glibc_likely (result == ETIMEDOUT)) - break; - assert (result == EAGAIN); + int err = __nacl_irt_futex.futex_wait_abs ((volatile int *) futex, 2, + abstime); + if (err != 0) + { + if (__glibc_likely (err == ETIMEDOUT)) + return err; + assert (err == EAGAIN); + } } - return result; + return 0; } |