From fdef47ec4f85ebad9e5800dd74bee93b4caaa2ab Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 17 May 2019 23:10:03 +0100 Subject: [PATCH] site: transport peers update: avoid nearly-trivial debug When the order of peers changes, but not the total set, we probably don't want to log it. Actually comparing the before and after lists setwise is rather too hard. But we can do it fairly easily when there's only one peer being recorded. Signed-off-by: Ian Jackson --- v2: New patch --- site.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/site.c b/site.c index 39520dd..681e595 100644 --- a/site.c +++ b/site.c @@ -2262,11 +2262,18 @@ static void transport_record_peers(struct site *st, transport_peers *peers, * * Caller must first call transport_peers_expire. */ - if (naddrs==1 && peers->npeers>=1 && - comm_addr_equal(&addrs[0], &peers->peers[0].addr)) { - /* optimisation, also avoids debug for trivial updates */ - peers->peers[0].last = *tv_now; - return; + if (naddrs==1) { + /* avoids debug for uninteresting updates */ + int i; + for (i=0; inpeers; i++) { + if (comm_addr_equal(&addrs[0], &peers->peers[i].addr)) { + memmove(peers->peers+1, peers->peers, + sizeof(peers->peers[0]) * i); + peers->peers[0].addr = addrs[0]; + peers->peers[0].last = *tv_now; + return; + } + } } int old_npeers=peers->npeers; -- 2.30.2