From ca5a791d0917bae80842ab90519cd8cffe41b9b5 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 7 Oct 2015 12:44:25 +0200 Subject: [PATCH] client: make waitsync check interval configurable --- chrony.texi.in | 16 ++++++++++------ client.c | 16 ++++++++++++---- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/chrony.texi.in b/chrony.texi.in index fe8c1a4..95ae47d 100644 --- a/chrony.texi.in +++ b/chrony.texi.in @@ -4687,10 +4687,10 @@ with the @code{rtcautotrim} directive (@pxref{rtcautotrim directive}). @subsubsection waitsync The @code{waitsync} command waits for @code{chronyd} to synchronise. -Up to three optional arguments can be specified, the first is the maximum -number of tries in 10 second intervals before giving up and returning a -non-zero error code. When 0 is specified, or there are no arguments, the -number of tries will not be limited. +Up to four optional arguments can be specified, the first is the maximum +number of tries before giving up and returning a non-zero error code. When 0 +is specified, or there are no arguments, the number of tries will not be +limited. The second and third arguments are the maximum allowed remaining correction of the system clock and the maximum allowed skew (in ppm) as reported by the @@ -4698,14 +4698,18 @@ the system clock and the maximum allowed skew (in ppm) as reported by the and @code{Skew} fields. If not specified or zero, the value will not be checked. +The fourth argument is the interval in which the check is repeated. The +interval is 10 seconds by default. + An example is @example waitsync 60 0.01 @end example -which will wait up to about 10 minutes for @code{chronyd} to synchronise to a -source and the remaining correction to be less than 10 milliseconds. +which will wait up to about 10 minutes (60 times 10 seconds) for @code{chronyd} +to synchronise to a source and the remaining correction to be less than 10 +milliseconds. @c }}} @c {{{ writertc @node writertc command diff --git a/client.c b/client.c index 967d70f..8dba0c6 100644 --- a/client.c +++ b/client.c @@ -1191,7 +1191,7 @@ give_help(void) "makestep\0Correct clock by stepping immediately\0" "makestep \0Configure automatic clock stepping\0" "maxupdateskew \0Modify maximum valid skew to update frequency\0" - "waitsync [max-tries [max-correction [max-skew]]]\0" + "waitsync [max-tries [max-correction [max-skew [interval]]]]\0" "Wait until synchronised in specified limits\0" "\0\0" "Time sources:\0\0" @@ -2313,14 +2313,20 @@ process_cmd_waitsync(char *line) CMD_Request request; CMD_Reply reply; uint32_t ref_id, a, b, c, d; - double correction, skew_ppm, max_correction, max_skew_ppm; + double correction, skew_ppm, max_correction, max_skew_ppm, interval; int ret = 0, max_tries, i; + struct timeval timeout; max_tries = 0; max_correction = 0.0; max_skew_ppm = 0.0; + interval = 10.0; - sscanf(line, "%d %lf %lf", &max_tries, &max_correction, &max_skew_ppm); + sscanf(line, "%d %lf %lf %lf", &max_tries, &max_correction, &max_skew_ppm, &interval); + + /* Don't allow shorter interval than 0.1 seconds */ + if (interval < 0.1) + interval = 0.1; request.command = htons(REQ_TRACKING); @@ -2347,7 +2353,9 @@ process_cmd_waitsync(char *line) } if (!ret && (!max_tries || i < max_tries) && !quit) { - sleep(10); + UTI_DoubleToTimeval(interval, &timeout); + if (select(0, NULL, NULL, NULL, &timeout)) + break; } else { break; }