nanosleep: Pass NULL when rem == NULL on ports with __TIMESIZE != 64
authorLukasz Majewski <lukma@denx.de>
Thu, 12 Nov 2020 11:24:04 +0000 (12:24 +0100)
committerLukasz Majewski <lukma@denx.de>
Sat, 14 Nov 2020 21:12:40 +0000 (22:12 +0100)
On ports with __TIMESIZE != 64 the remaining time argument always receives
pointer to struct __timespec64 instance. This is the different behavior
when compared to 64 bit versions of clock_nanosleep and nanosleep
functions, which receive NULL.

To avoid any potential issues, we also pass NULL when *rem pointer is
NULL.

Reported-by: Andreas Schwab <schwab@suse.de>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
sysdeps/unix/sysv/linux/clock_nanosleep.c
sysdeps/unix/sysv/linux/nanosleep.c

index 6ad3321..82cd11a 100644 (file)
@@ -78,7 +78,8 @@ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
   struct __timespec64 treq64, trem64;
 
   treq64 = valid_timespec_to_timespec64 (*req);
-  r = __clock_nanosleep_time64 (clock_id, flags, &treq64, &trem64);
+  r = __clock_nanosleep_time64 (clock_id, flags, &treq64,
+                                rem != NULL ? &trem64 : NULL);
 
   if (r == EINTR && rem != NULL && (flags & TIMER_ABSTIME) == 0)
     *rem = valid_timespec64_to_timespec (trem64);
index 8f4ee0f..e58815c 100644 (file)
@@ -39,7 +39,7 @@ __nanosleep (const struct timespec *req, struct timespec *rem)
   struct __timespec64 treq64, trem64;
 
   treq64 = valid_timespec_to_timespec64 (*req);
-  int ret = __nanosleep64 (&treq64, &trem64);
+  int ret = __nanosleep64 (&treq64, rem != NULL ? &trem64 : NULL);
 
   if (ret != 0 && errno == EINTR && rem != NULL)
     *rem = valid_timespec64_to_timespec (trem64);