]> granicus.if.org Git - sudo/commitdiff
Use a monotonic timer for the event subsystem.
authorTodd C. Miller <Todd.Miller@sudo.ws>
Sun, 26 Aug 2018 03:02:06 +0000 (21:02 -0600)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Sun, 26 Aug 2018 03:02:06 +0000 (21:02 -0600)
lib/util/event.c
lib/util/event_poll.c
lib/util/event_select.c

index 568232f6167c6de7120349c6874f6164995d50e3..203c18f338bfd647d874eedec284a92cb4ce4477 100644 (file)
@@ -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);
index 484f949eb39aba6d6a0468bc3a1fbdf5c911f113..c717b79da460dfabf2b7125bee9f9fea0922372b 100644 (file)
@@ -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);
index dd0f0fa16ae5a86d478fe4ac441c436c0d4de7d7..bcae3c03822ba150c21d994d4b90422fbe5b0563 100644 (file)
@@ -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);