Michal Schmidt 5a725f
From 908c733f6676b0154b669d116aad80851d97d024 Mon Sep 17 00:00:00 2001
Michal Schmidt 5a725f
From: Michal Schmidt <mschmidt@redhat.com>
Michal Schmidt 5a725f
Date: Wed, 10 Sep 2014 20:34:38 +0200
Michal Schmidt 5a725f
Subject: [PATCH] timesyncd: always use CLOCK_BOOTTIME if we can
Michal Schmidt 5a725f
Michal Schmidt 5a725f
Upstream commit:
Michal Schmidt 5a725f
commit 6a5c7b7e41a036bfdc2474b4583fcfdd358a6db6
Michal Schmidt 5a725f
Author: Lennart Poettering <lennart@poettering.net>
Michal Schmidt 5a725f
Date:   Sun Aug 10 23:40:48 2014 +0200
Michal Schmidt 5a725f
Michal Schmidt 5a725f
    timesyncd: always use CLOCK_BOOTTIME if we can
Michal Schmidt 5a725f
Michal Schmidt 5a725f
    After all we want to compare a monotonically increasing clock with the
Michal Schmidt 5a725f
    remote clock, hence we shouldn't ignore system suspend periods.
Michal Schmidt 5a725f
---
Michal Schmidt 5a725f
 src/timesync/timesyncd.c | 16 ++++++++--------
Michal Schmidt 5a725f
 1 file changed, 8 insertions(+), 8 deletions(-)
Michal Schmidt 5a725f
Michal Schmidt 5a725f
diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c
Michal Schmidt 5a725f
index 19af9f9b61..efe95442a6 100644
Michal Schmidt 5a725f
--- a/src/timesync/timesyncd.c
Michal Schmidt 5a725f
+++ b/src/timesync/timesyncd.c
Michal Schmidt 5a725f
@@ -245,7 +245,7 @@ static int manager_send_request(Manager *m) {
Michal Schmidt 5a725f
          * The actual value does not matter, We do not care about the correct
Michal Schmidt 5a725f
          * NTP UINT_MAX fraction; we just pass the plain nanosecond value.
Michal Schmidt 5a725f
          */
Michal Schmidt 5a725f
-        assert_se(clock_gettime(CLOCK_MONOTONIC, &m->trans_time_mon) >= 0);
Michal Schmidt 5a725f
+        assert_se(clock_gettime(clock_boottime_or_monotonic(), &m->trans_time_mon) >= 0);
Michal Schmidt 5a725f
         assert_se(clock_gettime(CLOCK_REALTIME, &m->trans_time) >= 0);
Michal Schmidt 5a725f
         ntpmsg.trans_time.sec = htobe32(m->trans_time.tv_sec + OFFSET_1900_1970);
Michal Schmidt 5a725f
         ntpmsg.trans_time.frac = htobe32(m->trans_time.tv_nsec);
Michal Schmidt 5a725f
@@ -277,8 +277,8 @@ static int manager_send_request(Manager *m) {
Michal Schmidt 5a725f
         r = sd_event_add_time(
Michal Schmidt 5a725f
                         m->event,
Michal Schmidt 5a725f
                         &m->event_timeout,
Michal Schmidt 5a725f
-                        CLOCK_MONOTONIC,
Michal Schmidt 5a725f
-                        now(CLOCK_MONOTONIC) + TIMEOUT_USEC, 0,
Michal Schmidt 5a725f
+                        clock_boottime_or_monotonic(),
Michal Schmidt 5a725f
+                        now(clock_boottime_or_monotonic()) + TIMEOUT_USEC, 0,
Michal Schmidt 5a725f
                         manager_timeout, m);
Michal Schmidt 5a725f
         if (r < 0) {
Michal Schmidt 5a725f
                 log_error("Failed to arm timeout timer: %s", strerror(-r));
Michal Schmidt 5a725f
@@ -308,7 +308,7 @@ static int manager_arm_timer(Manager *m, usec_t next) {
Michal Schmidt 5a725f
         }
Michal Schmidt 5a725f
 
Michal Schmidt 5a725f
         if (m->event_timer) {
Michal Schmidt 5a725f
-                r = sd_event_source_set_time(m->event_timer, now(CLOCK_MONOTONIC) + next);
Michal Schmidt 5a725f
+                r = sd_event_source_set_time(m->event_timer, now(clock_boottime_or_monotonic()) + next);
Michal Schmidt 5a725f
                 if (r < 0)
Michal Schmidt 5a725f
                         return r;
Michal Schmidt 5a725f
 
Michal Schmidt 5a725f
@@ -318,8 +318,8 @@ static int manager_arm_timer(Manager *m, usec_t next) {
Michal Schmidt 5a725f
         return sd_event_add_time(
Michal Schmidt 5a725f
                         m->event,
Michal Schmidt 5a725f
                         &m->event_timer,
Michal Schmidt 5a725f
-                        CLOCK_MONOTONIC,
Michal Schmidt 5a725f
-                        now(CLOCK_MONOTONIC) + next, 0,
Michal Schmidt 5a725f
+                        clock_boottime_or_monotonic(),
Michal Schmidt 5a725f
+                        now(clock_boottime_or_monotonic()) + next, 0,
Michal Schmidt 5a725f
                         manager_timer, m);
Michal Schmidt 5a725f
 }
Michal Schmidt 5a725f
 
Michal Schmidt 5a725f
@@ -677,7 +677,7 @@ static int manager_receive_response(sd_event_source *source, int fd, uint32_t re
Michal Schmidt 5a725f
          *  The round-trip delay, d, and system clock offset, t, are defined as:
Michal Schmidt 5a725f
          *  d = (T4 - T1) - (T3 - T2)     t = ((T2 - T1) + (T3 - T4)) / 2"
Michal Schmidt 5a725f
          */
Michal Schmidt 5a725f
-        assert_se(clock_gettime(CLOCK_MONOTONIC, &now_ts) >= 0);
Michal Schmidt 5a725f
+        assert_se(clock_gettime(clock_boottime_or_monotonic(), &now_ts) >= 0);
Michal Schmidt 5a725f
         origin = tv_to_d(recv_time) - (ts_to_d(&now_ts) - ts_to_d(&m->trans_time_mon)) + OFFSET_1900_1970;
Michal Schmidt 5a725f
         receive = ntp_ts_to_d(&ntpmsg.recv_time);
Michal Schmidt 5a725f
         trans = ntp_ts_to_d(&ntpmsg.trans_time);
Michal Schmidt 5a725f
@@ -904,7 +904,7 @@ static int manager_connect(Manager *m) {
Michal Schmidt 5a725f
         if (!ratelimit_test(&m->ratelimit)) {
Michal Schmidt 5a725f
                 log_debug("Slowing down attempts to contact servers.");
Michal Schmidt 5a725f
 
Michal Schmidt 5a725f
-                r = sd_event_add_time(m->event, &m->event_retry, CLOCK_MONOTONIC, now(CLOCK_MONOTONIC) + RETRY_USEC, 0, manager_retry, m);
Michal Schmidt 5a725f
+                r = sd_event_add_time(m->event, &m->event_retry, clock_boottime_or_monotonic(), now(clock_boottime_or_monotonic()) + RETRY_USEC, 0, manager_retry, m);
Michal Schmidt 5a725f
                 if (r < 0) {
Michal Schmidt 5a725f
                         log_error("Failed to create retry timer: %s", strerror(-r));
Michal Schmidt 5a725f
                         return r;