diff options
Diffstat (limited to 'sysdeps/nptl')
-rw-r--r-- | sysdeps/nptl/futex-internal.c | 8 | ||||
-rw-r--r-- | sysdeps/nptl/futex-internal.h | 14 |
2 files changed, 13 insertions, 9 deletions
diff --git a/sysdeps/nptl/futex-internal.c b/sysdeps/nptl/futex-internal.c index 457cd3cd69..e4a14b477c 100644 --- a/sysdeps/nptl/futex-internal.c +++ b/sysdeps/nptl/futex-internal.c @@ -25,7 +25,7 @@ #ifndef __ASSUME_TIME64_SYSCALLS static int __futex_abstimed_wait_cancelable32 (unsigned int* futex_word, - unsigned int expected, clockid_t clockid, + unsigned int expected, int op, const struct __timespec64* abstime, int private) { @@ -39,10 +39,6 @@ __futex_abstimed_wait_cancelable32 (unsigned int* futex_word, pts32 = &ts32; } - unsigned int clockbit = (clockid == CLOCK_REALTIME) - ? FUTEX_CLOCK_REALTIME : 0; - int op = __lll_private_flag (FUTEX_WAIT_BITSET | clockbit, private); - return INTERNAL_SYSCALL_CANCEL (futex, futex_word, op, expected, pts32, NULL /* Unused. */, FUTEX_BITSET_MATCH_ANY); @@ -119,7 +115,7 @@ __futex_abstimed_wait_cancelable64 (unsigned int* futex_word, #ifndef __ASSUME_TIME64_SYSCALLS if (err == -ENOSYS) err = __futex_abstimed_wait_cancelable32 (futex_word, expected, - clockid, abstime, private); + op, abstime, private); #endif switch (err) diff --git a/sysdeps/nptl/futex-internal.h b/sysdeps/nptl/futex-internal.h index d5f13d15fb..8c1d592308 100644 --- a/sysdeps/nptl/futex-internal.h +++ b/sysdeps/nptl/futex-internal.h @@ -390,9 +390,17 @@ futex_unlock_pi (unsigned int *futex_word, int private) } } -/* The futex_abstimed_wait_cancelable64 has been moved to a separate file - to avoid problems with exhausting available registers on some architectures - - e.g. on m68k architecture. */ +/* Like futex_wait, but will eventually time out (i.e., stop being blocked) + after the duration of time provided (i.e., ABSTIME) has passed using the + clock specified by CLOCKID (currently only CLOCK_REALTIME and + CLOCK_MONOTONIC, the ones support by lll_futex_supported_clockid). ABSTIME + can also equal NULL, in which case this function behaves equivalent to + futex_wait. + + Returns the same values as futex_wait under those same conditions; + additionally, returns ETIMEDOUT if the timeout expired. + + The call acts as a cancellation entrypoint. */ int __futex_abstimed_wait_cancelable64 (unsigned int* futex_word, unsigned int expected, clockid_t clockid, |