mirror of git://sourceware.org/git/glibc.git
nptl: Extend __futex_abstimed_wait_cancelable64 comment
And add a small optimization to avoid setting the operation for the 32-bit time fallback operation. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Lukasz Majewski <lukma@denx.de>
This commit is contained in:
parent
9e92278ffa
commit
e77221a523
|
@ -25,7 +25,7 @@
|
||||||
#ifndef __ASSUME_TIME64_SYSCALLS
|
#ifndef __ASSUME_TIME64_SYSCALLS
|
||||||
static int
|
static int
|
||||||
__futex_abstimed_wait_cancelable32 (unsigned int* futex_word,
|
__futex_abstimed_wait_cancelable32 (unsigned int* futex_word,
|
||||||
unsigned int expected, clockid_t clockid,
|
unsigned int expected, int op,
|
||||||
const struct __timespec64* abstime,
|
const struct __timespec64* abstime,
|
||||||
int private)
|
int private)
|
||||||
{
|
{
|
||||||
|
@ -39,10 +39,6 @@ __futex_abstimed_wait_cancelable32 (unsigned int* futex_word,
|
||||||
pts32 = &ts32;
|
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,
|
return INTERNAL_SYSCALL_CANCEL (futex, futex_word, op, expected,
|
||||||
pts32, NULL /* Unused. */,
|
pts32, NULL /* Unused. */,
|
||||||
FUTEX_BITSET_MATCH_ANY);
|
FUTEX_BITSET_MATCH_ANY);
|
||||||
|
@ -119,7 +115,7 @@ __futex_abstimed_wait_cancelable64 (unsigned int* futex_word,
|
||||||
#ifndef __ASSUME_TIME64_SYSCALLS
|
#ifndef __ASSUME_TIME64_SYSCALLS
|
||||||
if (err == -ENOSYS)
|
if (err == -ENOSYS)
|
||||||
err = __futex_abstimed_wait_cancelable32 (futex_word, expected,
|
err = __futex_abstimed_wait_cancelable32 (futex_word, expected,
|
||||||
clockid, abstime, private);
|
op, abstime, private);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (err)
|
switch (err)
|
||||||
|
|
|
@ -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
|
/* Like futex_wait, but will eventually time out (i.e., stop being blocked)
|
||||||
to avoid problems with exhausting available registers on some architectures
|
after the duration of time provided (i.e., ABSTIME) has passed using the
|
||||||
- e.g. on m68k architecture. */
|
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
|
int
|
||||||
__futex_abstimed_wait_cancelable64 (unsigned int* futex_word,
|
__futex_abstimed_wait_cancelable64 (unsigned int* futex_word,
|
||||||
unsigned int expected, clockid_t clockid,
|
unsigned int expected, clockid_t clockid,
|
||||||
|
|
Loading…
Reference in New Issue