mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-26 20:12:44 +00:00
dhclient: Use clock_gettime() instead of time()
Change the use of time() to clock_gettime() to have millisecond-accurate rather than second-accurate timeouts. Sponsored by: Google LLC (GSoC 2024) Signed-off-by: Isaac Cilia Attard <icattard@FreeBSD.org> MFC after: 10 days Reviwed by: cperciva, brooks, Tom Hukins, Alexander Ziaee Pull Request: https://github.com/freebsd/freebsd-src/pull/1368
This commit is contained in:
parent
76e0ffd9f8
commit
f0a38976b0
@ -446,7 +446,8 @@ main(int argc, char *argv[])
|
||||
log_perror = 0;
|
||||
|
||||
tzset();
|
||||
time(&cur_time);
|
||||
clock_gettime(CLOCK_MONOTONIC, &time_now);
|
||||
cur_time = time_now.tv_sec;
|
||||
|
||||
inaddr_broadcast.s_addr = INADDR_BROADCAST;
|
||||
inaddr_any.s_addr = INADDR_ANY;
|
||||
|
@ -56,6 +56,10 @@
|
||||
#define assert_aligned(p, align) assert((((uintptr_t)p) & ((align) - 1)) == 0)
|
||||
|
||||
static struct protocol *protocols;
|
||||
static const struct timespec timespec_intmax_ms = {
|
||||
.tv_sec = INT_MAX / 1000,
|
||||
.tv_nsec = (INT_MAX % 1000) * 1000000
|
||||
};
|
||||
static struct timeout *timeouts;
|
||||
static struct timeout *free_timeouts;
|
||||
static int interfaces_invalidated;
|
||||
@ -190,9 +194,9 @@ another:
|
||||
* negative timeout and blocking indefinitely.
|
||||
*/
|
||||
timespecsub(&timeouts->when, &time_now, &howlong);
|
||||
if (howlong.tv_sec > INT_MAX / 1000)
|
||||
howlong.tv_sec = INT_MAX / 1000;
|
||||
to_msec = howlong.tv_sec * 1000;
|
||||
if (timespeccmp(&howlong, ×pec_intmax_ms, >))
|
||||
howlong = timespec_intmax_ms;
|
||||
to_msec = howlong.tv_sec * 1000 + howlong.tv_nsec / 1000000;
|
||||
} else
|
||||
to_msec = -1;
|
||||
|
||||
@ -219,16 +223,16 @@ another:
|
||||
/* Not likely to be transitory... */
|
||||
if (count == -1) {
|
||||
if (errno == EAGAIN || errno == EINTR) {
|
||||
time(&cur_time);
|
||||
time_now.tv_sec = cur_time;
|
||||
clock_gettime(CLOCK_MONOTONIC, &time_now);
|
||||
cur_time = time_now.tv_sec;
|
||||
continue;
|
||||
} else
|
||||
error("poll: %m");
|
||||
}
|
||||
|
||||
/* Get the current time... */
|
||||
time(&cur_time);
|
||||
time_now.tv_sec = cur_time;
|
||||
clock_gettime(CLOCK_MONOTONIC, &time_now);
|
||||
cur_time = time_now.tv_sec;
|
||||
|
||||
i = 0;
|
||||
for (l = protocols; l; l = l->next) {
|
||||
|
Loading…
Reference in New Issue
Block a user