From: Miroslav Lichvar Date: Tue, 21 Nov 2023 10:10:23 +0000 (+0100) Subject: sources: reselect earlier when removing selected source X-Git-Tag: 4.5-pre1~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5dd288dc0cbdd8a4457da28be8dab0a1fba1d100;p=thirdparty%2Fchrony.git sources: reselect earlier when removing selected source When a selected source is being removed, reset the instance and rerun the selection while the source is still marked as selected. This forces a "Can't synchronise" message to be logged when all sources are removed. Reported-by: Thomas Lange --- diff --git a/sources.c b/sources.c index ec09ff31..4bfc1a1c 100644 --- a/sources.c +++ b/sources.c @@ -314,8 +314,12 @@ void SRC_DestroyInstance(SRC_Instance instance) if (last_updated_inst == instance) last_updated_inst = NULL; + /* Force reselection if currently selected */ + SRC_ResetInstance(instance); + assert(initialised); if (instance->index < 0 || instance->index >= n_sources || + instance->index == selected_source_index || instance != sources[instance->index]) assert(0); @@ -330,10 +334,7 @@ void SRC_DestroyInstance(SRC_Instance instance) update_sel_options(); - /* If this was the previous reference source, we have to reselect! */ - if (selected_source_index == dead_index) - SRC_ReselectSource(); - else if (selected_source_index > dead_index) + if (selected_source_index > dead_index) --selected_source_index; }