From: Miroslav Lichvar Date: Tue, 27 Oct 2009 13:28:19 +0000 (+0100) Subject: Reselect source also according to distance X-Git-Tag: 1.24-pre1~69 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=352f03d4875fc1c8b70fc51565e2adb022d44e5a;p=thirdparty%2Fchrony.git Reselect source also according to distance Reselect when a source with the same stratum is available and has significantly better distance than the current source. --- diff --git a/sources.c b/sources.c index b77a5b72..1a2c84d1 100644 --- a/sources.c +++ b/sources.c @@ -656,29 +656,32 @@ SRC_SelectSource(unsigned long match_addr) if (stratum < min_stratum) min_stratum = stratum; } + /* Find the best source with minimum stratum */ + min_distance_index = INVALID_SOURCE; + for (i=0; isel_info.stratum == min_stratum) { + if ((min_distance_index == INVALID_SOURCE) || + (sources[index]->sel_info.root_distance < min_distance)) { + min_distance = sources[index]->sel_info.root_distance; + min_distance_index = index; + } + } + } + #if 0 LOG(LOGS_INFO, LOGF_Sources, "min_stratum=%d", min_stratum); #endif - /* Does the current source have this stratum and is it still a - survivor? */ + /* Does the current source have this stratum, doesn't have distance + much worse than the best source and is it still a survivor? */ if ((selected_source_index == INVALID_SOURCE) || (sources[selected_source_index]->status != SRC_SELECTABLE) || - (sources[selected_source_index]->sel_info.stratum > min_stratum)) { + (sources[selected_source_index]->sel_info.stratum > min_stratum) || + (sources[selected_source_index]->sel_info.root_distance > 10 * min_distance)) { /* We have to elect a new synchronisation source */ - min_distance_index = INVALID_SOURCE; - for (i=0; isel_info.stratum == min_stratum) { - if ((min_distance_index == INVALID_SOURCE) || - (sources[index]->sel_info.root_distance < min_distance)) { - min_distance = sources[index]->sel_info.root_distance; - min_distance_index = index; - } - } - } selected_source_index = min_distance_index; LOG(LOGS_INFO, LOGF_Sources, "Selected source %s",