time-util: use clock_nanosleep() rather than nanosleep()
nanosleep() is kinda broken since it sleeps in the CLOCK_REALTIME clock, i.e. is subject to time changes. Let's use clock_nanosleep() instead with CLOCK_MONOTONIC, which is really the only thing that makes sense.
This commit is contained in:
@@ -214,10 +214,13 @@ static inline usec_t usec_sub_signed(usec_t timestamp, int64_t delta) {
|
||||
|
||||
static inline int usleep_safe(usec_t usec) {
|
||||
/* usleep() takes useconds_t that is (typically?) uint32_t. Also, usleep() may only support the
|
||||
* range [0, 1000000]. See usleep(3). Let's override usleep() with nanosleep(). */
|
||||
* range [0, 1000000]. See usleep(3). Let's override usleep() with clock_nanosleep().
|
||||
*
|
||||
* ⚠️ Note we are not using plain nanosleep() here, since that operates on CLOCK_REALTIME, not
|
||||
* CLOCK_MONOTONIC! */
|
||||
|
||||
// FIXME: use RET_NERRNO() macro here. Currently, this header cannot include errno-util.h.
|
||||
return nanosleep(TIMESPEC_STORE(usec), NULL) < 0 ? -errno : 0;
|
||||
return clock_nanosleep(CLOCK_MONOTONIC, 0, TIMESPEC_STORE(usec), NULL) < 0 ? -errno : 0;
|
||||
}
|
||||
|
||||
/* The last second we can format is 31. Dec 9999, 1s before midnight, because otherwise we'd enter 5 digit
|
||||
|
||||
Reference in New Issue
Block a user