diff options
author | Dmitry Chestnykh <dm.chestnykh@gmail.com> | 2024-02-28 11:45:09 +0300 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2024-02-28 10:07:11 +0100 |
commit | c6e359dbc7bd155b10e15616d11e15c48b8bbefa (patch) | |
tree | a3a881c1cbeba8db9b7373a3e0b92eb0b0202a02 /libpthread/nptl/pthread_mutex_timedlock.c | |
parent | 8a6af75fcae2d24cd14f2d91c11a52adae154ebc (diff) |
libc: Pass 64bit-only time structures to syscalls.
With time64 enabled we need to pass structure
which consists of two 64bit fields to clock_gettime64()
and clock_nanosleep_time64() syscalls with proper conversion
to regular timespec structure after syscall execution.
Signed-off-by: Dmitry Chestnykh <dm.chestnykh@gmail.com>
Diffstat (limited to 'libpthread/nptl/pthread_mutex_timedlock.c')
-rw-r--r-- | libpthread/nptl/pthread_mutex_timedlock.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libpthread/nptl/pthread_mutex_timedlock.c b/libpthread/nptl/pthread_mutex_timedlock.c index d54983315..1191639b6 100644 --- a/libpthread/nptl/pthread_mutex_timedlock.c +++ b/libpthread/nptl/pthread_mutex_timedlock.c @@ -298,11 +298,19 @@ pthread_mutex_timedlock ( /* Delay the thread until the timeout is reached. Then return ETIMEDOUT. */ struct timespec reltime; - struct timespec now; +#if defined(__UCLIBC_USE_TIME64__) + struct __ts64_struct __now64; +#endif + struct timespec now = {.tv_sec = 0, .tv_nsec = 0}; #if defined(__UCLIBC_USE_TIME64__) && defined(__NR_clock_gettime64) - INTERNAL_SYSCALL (clock_gettime64, __err, 2, CLOCK_REALTIME, - &now); + int __r = INTERNAL_SYSCALL (clock_gettime64, __err, 2, CLOCK_REALTIME, + &__now64); + + if (__r == 0) { + now.tv_sec = __now64.tv_sec; + now.tv_nsec = __now64.tv_nsec; + } #else INTERNAL_SYSCALL (clock_gettime, __err, 2, CLOCK_REALTIME, &now); |