From f21754707cf42f18523aafdaad88b8ef3c317e37 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 28 May 2015 15:35:45 -0700 Subject: NaCl: Fix lll_futex_timed_wait timeout calculation. --- sysdeps/nacl/lowlevellock-futex.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'sysdeps/nacl') 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; \ }) -- cgit 1.4.1