From 03751c8a7ddfd7e304f371bde5ecc2a4e7d74af7 Mon Sep 17 00:00:00 2001 From: GNU Libc Maintainers Date: Wed, 18 Jun 2025 06:49:31 +0200 Subject: [PATCH] git-rt-timedwait-realtime commit 5293b5ec02706bad449ea5eccd0058257a369638 Author: Samuel Thibault Date: Sun Mar 9 22:25:14 2025 +0100 aio_suspend64: Fix clock discrepancy [BZ #32795] cc5d5852c65e ("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. Gbp-Pq: Topic hurd-i386 Gbp-Pq: Name git-rt-timedwait-realtime.diff --- rt/aio_suspend.c | 3 ++- sysdeps/nptl/aio_misc.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/rt/aio_suspend.c b/rt/aio_suspend.c index 2257cd80d..8370bcf27 100644 --- a/rt/aio_suspend.c +++ b/rt/aio_suspend.c @@ -195,7 +195,8 @@ ___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, + result = __pthread_cond_clockwait (&cond, &__aio_requests_mutex, + CLOCK_MONOTONIC, timeout == NULL ? NULL : &ts32); #endif diff --git a/sysdeps/nptl/aio_misc.h b/sysdeps/nptl/aio_misc.h index ddc5acc37..87fd759f1 100644 --- a/sysdeps/nptl/aio_misc.h +++ b/sysdeps/nptl/aio_misc.h @@ -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; \ \ -- 2.30.2