diff options
author | Roland McGrath <roland@hack.frob.com> | 2015-05-28 15:35:45 -0700 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2015-05-28 15:35:45 -0700 |
commit | f21754707cf42f18523aafdaad88b8ef3c317e37 (patch) | |
tree | e77e75fe1a37201f1e7674136e3c7bfab3581c54 /sysdeps | |
parent | 58007e9e68913290b1f4f73afc1055f779a8ed5d (diff) | |
download | glibc-f21754707cf42f18523aafdaad88b8ef3c317e37.tar.gz |
NaCl: Fix lll_futex_timed_wait timeout calculation.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/nacl/lowlevellock-futex.h | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/sysdeps/nacl/lowlevellock-futex.h b/sysdeps/nacl/lowlevellock-futex.h index 8d888a2e72..b614ac8183 100644 --- a/sysdeps/nacl/lowlevellock-futex.h +++ b/sysdeps/nacl/lowlevellock-futex.h @@ -40,26 +40,26 @@ /* Wait until a lll_futex_wake call on FUTEXP, or TIMEOUT elapses. */ #define lll_futex_timed_wait(futexp, val, timeout, private) \ ({ \ - /* This timeout is relative, but the IRT call wants it absolute. */ \ + /* This timeout is relative, but the IRT call wants it absolute. */\ const struct timespec *_to = (timeout); \ struct timespec _ts; \ int _err = 0; \ if (_to != NULL \ - && __glibc_likely ((_err = __nacl_irt_clock.clock_gettime \ - (CLOCK_REALTIME, &_ts)) == 0)) \ + && __glibc_likely ((_err = __nacl_irt_clock.clock_gettime \ + (CLOCK_REALTIME, &_ts)) == 0)) \ { \ - _ts.tv_sec -= _to->tv_sec; \ - _ts.tv_nsec -= _to->tv_nsec; \ - while (_ts.tv_nsec < 0) \ - { \ - _ts.tv_nsec += 1000000000; \ - --_ts.tv_sec; \ - } \ - _to = &_ts; \ + _ts.tv_sec += _to->tv_sec; \ + _ts.tv_nsec += _to->tv_nsec; \ + while (_ts.tv_nsec >= 1000000000) \ + { \ + _ts.tv_nsec -= 1000000000; \ + ++_ts.tv_sec; \ + } \ + _to = &_ts; \ } \ if (_err == 0) \ _err = __nacl_irt_futex.futex_wait_abs \ - ((volatile int *) (futexp), val, _to); \ + ((volatile int *) (futexp), val, _to); \ -_err; \ }) |