Merge pull request #29239 from poettering/clock-nanosleep

use clock_nanosleep() rather than nanosleep()
This commit is contained in:
Lennart Poettering
2023-09-20 16:14:53 +02:00
committed by GitHub
2 changed files with 7 additions and 7 deletions

View File

@@ -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

View File

@@ -793,14 +793,11 @@ int scsi_get_serial(struct scsi_id_device *dev_scsi, const char *devname,
memzero(dev_scsi->serial, len);
for (cnt = 20; cnt > 0; cnt--) {
struct timespec duration;
fd = open(devname, O_RDONLY | O_NONBLOCK | O_CLOEXEC | O_NOCTTY);
if (fd >= 0 || errno != EBUSY)
break;
duration.tv_sec = 0;
duration.tv_nsec = (200 * 1000 * 1000) + (random_u32() % 100 * 1000 * 1000);
nanosleep(&duration, NULL);
usleep_safe(200U*USEC_PER_MSEC + random_u64_range(100U*USEC_PER_MSEC));
}
if (fd < 0)
return 1;