From 6199822783c4f1624f6a9e61f1d279bd88e98689 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Mon, 27 Feb 2012 13:27:32 +0100 Subject: [PATCH] Test leap second timezone on start --- reference.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/reference.c b/reference.c index 1ef3fa6..1d9a249 100644 --- a/reference.c +++ b/reference.c @@ -126,6 +126,10 @@ static double last_ref_update_interval; /* ================================================== */ +static NTP_Leap get_tz_leap(time_t when); + +/* ================================================== */ + static void handle_slew(struct timeval *raw, struct timeval *cooked, @@ -202,6 +206,16 @@ REF_Initialise(void) enable_local_stratum = CNF_AllowLocalReference(&local_stratum); leap_tzname = CNF_GetLeapSecTimezone(); + if (leap_tzname) { + /* Check that the timezone has good data for Jun 30 2008 and Dec 31 2008 */ + if (get_tz_leap(1214784000) == LEAP_Normal && + get_tz_leap(1230681600) == LEAP_InsertSecond) { + LOG(LOGS_INFO, LOGF_Reference, "Using %s timezone to obtain leap second data", leap_tzname); + } else { + LOG(LOGS_WARN, LOGF_Reference, "Timezone %s failed leap second check, ignoring", leap_tzname); + leap_tzname = NULL; + } + } CNF_GetMakeStep(&make_step_limit, &make_step_threshold); CNF_GetMaxChange(&max_offset_delay, &max_offset_ignore, &max_offset);