When a server specified with the copy option responds with an
unsynchronized status (e.g. due to selection failure), reset the
source instance to immediately switch the local reference status
instead of waiting for the source to become unreachable after 8 polls.
SRC_UpdateReachability(inst->source, synced_packet);
- if (synced_packet) {
- if (inst->copy && inst->remote_stratum > 0) {
- /* Assume the reference ID and stratum of the server */
+ if (inst->copy) {
+ /* Assume the reference ID and stratum of the server */
+ if (synced_packet && inst->remote_stratum > 0) {
inst->remote_stratum--;
SRC_SetRefid(inst->source, ntohl(message->reference_id), &inst->remote_addr.ip_addr);
+ } else {
+ SRC_ResetInstance(inst->source);
}
+ }
+ if (synced_packet) {
SRC_UpdateStatus(inst->source, MAX(inst->remote_stratum, inst->min_stratum), pkt_leap);
if (inst->delay_quant)