mirror of git://sourceware.org/git/glibc.git
aio_suspend64: Fix clock discrepancy [BZ #32795]
cc5d5852c6
("y2038: Convert aio_suspend to support 64 bit time")
switched from __clock_gettime (CLOCK_REALTIME, &now); to __clock_gettime64
(CLOCK_MONOTONIC, &ts);, but pthread_cond_timedwait is based on the
absolute realtime clock, so migrate to using pthread_cond_clockwait to
select CLOCK_MONOTONIC. Also fix AIO_MISC_WAIT into passing
CLOCK_MONOTONIC to __futex_abstimed_wait64.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
e3a6e85d67
commit
b62692d3c7
|
@ -195,8 +195,9 @@ ___aio_suspend_time64 (const struct aiocb *const list[], int nent,
|
|||
result = do_aio_misc_wait (&cntr, timeout == NULL ? NULL : &ts);
|
||||
#else
|
||||
struct timespec ts32 = valid_timespec64_to_timespec (ts);
|
||||
result = pthread_cond_timedwait (&cond, &__aio_requests_mutex,
|
||||
timeout == NULL ? NULL : &ts32);
|
||||
result = __pthread_cond_clockwait (&cond, &__aio_requests_mutex,
|
||||
CLOCK_MONOTONIC,
|
||||
timeout == NULL ? NULL : &ts32);
|
||||
#endif
|
||||
|
||||
#if PTHREAD_IN_LIBC
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
FUTEX_PRIVATE); \
|
||||
else \
|
||||
status = __futex_abstimed_wait64 ((unsigned int *) futexaddr, \
|
||||
oldval, CLOCK_REALTIME, timeout, FUTEX_PRIVATE); \
|
||||
oldval, CLOCK_MONOTONIC, timeout, FUTEX_PRIVATE); \
|
||||
if (status != EAGAIN) \
|
||||
break; \
|
||||
\
|
||||
|
|
Loading…
Reference in New Issue