From: Todd C. Miller Date: Sun, 26 Aug 2018 03:02:06 +0000 (-0600) Subject: Use a monotonic timer for the event subsystem. X-Git-Tag: SUDO_1_8_25^2~25 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6b76f9dbd310a4ebc8cea5c28127d82b0cacfe92;p=sudo Use a monotonic timer for the event subsystem. --- diff --git a/lib/util/event.c b/lib/util/event.c index 568232f61..203c18f33 100644 --- a/lib/util/event.c +++ b/lib/util/event.c @@ -484,8 +484,7 @@ sudo_ev_add_v1(struct sudo_event_base *base, struct sudo_event *ev, TAILQ_REMOVE(&base->timeouts, ev, timeouts_entries); } /* Convert to absolute time and insert in sorted order; O(n). */ - /* XXX - use monotime */ - sudo_gettime_real(&ev->timeout); + sudo_gettime_mono(&ev->timeout); sudo_timespecadd(&ev->timeout, timo, &ev->timeout); TAILQ_FOREACH(evtmp, &base->timeouts, timeouts_entries) { if (sudo_timespeccmp(timo, &evtmp->timeout, <)) @@ -637,7 +636,7 @@ rescan: goto done; case 0: /* Timed out, activate timeout events. */ - sudo_gettime_real(&now); + sudo_gettime_mono(&now); while ((ev = TAILQ_FIRST(&base->timeouts)) != NULL) { if (sudo_timespeccmp(&ev->timeout, &now, >)) break; @@ -759,7 +758,7 @@ sudo_ev_get_timeleft_v1(struct sudo_event *ev, struct timespec *ts) debug_return_int(-1); } - sudo_gettime_real(&now); + sudo_gettime_mono(&now); sudo_timespecsub(&ev->timeout, &now, ts); if (ts->tv_sec < 0 || (ts->tv_sec == 0 && ts->tv_nsec < 0)) sudo_timespecclear(ts); diff --git a/lib/util/event_poll.c b/lib/util/event_poll.c index 484f949eb..c717b79da 100644 --- a/lib/util/event_poll.c +++ b/lib/util/event_poll.c @@ -159,7 +159,7 @@ sudo_ev_scan_impl(struct sudo_event_base *base, int flags) debug_decl(sudo_ev_scan_impl, SUDO_DEBUG_EVENT) if ((ev = TAILQ_FIRST(&base->timeouts)) != NULL) { - sudo_gettime_real(&now); + sudo_gettime_mono(&now); sudo_timespecsub(&ev->timeout, &now, &ts); if (ts.tv_sec < 0 || (ts.tv_sec == 0 && ts.tv_nsec < 0)) sudo_timespecclear(&ts); diff --git a/lib/util/event_select.c b/lib/util/event_select.c index dd0f0fa16..bcae3c038 100644 --- a/lib/util/event_select.c +++ b/lib/util/event_select.c @@ -200,7 +200,7 @@ sudo_ev_scan_impl(struct sudo_event_base *base, int flags) debug_decl(sudo_ev_loop, SUDO_DEBUG_EVENT) if ((ev = TAILQ_FIRST(&base->timeouts)) != NULL) { - sudo_gettime_real(&now); + sudo_gettime_mono(&now); sudo_timespecsub(&ev->timeout, &now, &ts); if (ts.tv_sec < 0 || (ts.tv_sec == 0 && ts.tv_nsec < 0)) sudo_timespecclear(&ts);