]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 2745] ntpd -x steps clock on leap second
authorJuergen Perlinger <perlinger@ntp.org>
Tue, 21 Apr 2015 19:08:11 +0000 (21:08 +0200)
committerJuergen Perlinger <perlinger@ntp.org>
Tue, 21 Apr 2015 19:08:11 +0000 (21:08 +0200)
  Do leap second stepping only of the step adjustment is beyond the proper jump distance limit and step correction is allowed at all.

bk: 5536a01bsP24qMk41nIZEUlK9FTYJw

ChangeLog
ntpd/ntp_timer.c

index de60ac5a8dc217a98d3ba0b6ada768685b79f97e..0873beb0ad4c5db09e93d9e0defea2b57c776d5c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 ---
 
+* [Bug 2745] ntpd -x steps clock on leap second 
+   Do leap second stepping only of the step adjustment is beyond the
+   proper jump distance limit and step correction is allowed at all. 
 * [Bug 2794] Clean up kernel clock status reports.
 * [Bug 2804] install-local-data assumes GNU 'find' semantics.
 * [Bug 2808] GPSD_JSON driver enhancements, step 1.
index 958c8db394003e32c822a4d8c9ef9dbb18ac0214..cc7e9ef1ad749df287ef4b18132010f0b8979002 100644 (file)
@@ -472,7 +472,7 @@ alarming(
 # endif
 # ifdef DEBUG
        if (debug >= 4)
-               write(1, msg, strlen(msg));
+               (void)(0 != write(1, msg, strlen(msg)));
 # endif
 }
 #endif /* SYS_WINNT */
@@ -521,11 +521,21 @@ check_leapsec(
                 * announce the leap event has happened.
                 */
                if (lsdata.warped < 0) {
-                       step_systime(lsdata.warped);
-                       msyslog(LOG_NOTICE, "Inserting positive leap second.");
+                       if (clock_max_back > 0.0 &&
+                           clock_max_back < fabs(lsdata.warped)) {
+                               step_systime(lsdata.warped);
+                               msyslog(LOG_NOTICE, "Positive leap second, stepped backward.");
+                       } else {
+                               msyslog(LOG_NOTICE, "Positive leap second, expect heavy slowdown slew.");
+                       }
                } else  if (lsdata.warped > 0) {
-                       step_systime(lsdata.warped);
-                       msyslog(LOG_NOTICE, "Inserting negative leap second.");
+                       if (clock_max_fwd > 0.0 &&
+                           clock_max_fwd < fabs(lsdata.warped)) {
+                               step_systime(lsdata.warped);
+                               msyslog(LOG_NOTICE, "Negative leap second, stepped forward.");
+                       } else {
+                               msyslog(LOG_NOTICE, "Negative leap second, expect heavy speedup slew.");
+                       }
                }
                report_event(EVNT_LEAP, NULL, NULL);
                lsprox  = LSPROX_NOWARN;