From 9e39259ffe513a45df8462e540045f7df75c9ae9 Mon Sep 17 00:00:00 2001 From: vyzo Date: Thu, 13 Jan 2022 13:20:20 +0200 Subject: [PATCH] properly clear the peerPromises map --- gossip_tracer.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/gossip_tracer.go b/gossip_tracer.go index 9ee9a24..04e7719 100644 --- a/gossip_tracer.go +++ b/gossip_tracer.go @@ -118,17 +118,24 @@ var _ RawTracer = (*gossipTracer)(nil) func (gt *gossipTracer) fulfillPromise(msg *Message) { mid := gt.msgID(msg.Message) - p := msg.ReceivedFrom gt.Lock() defer gt.Unlock() + promises, ok := gt.promises[mid] + if !ok { + return + } delete(gt.promises, mid) - peerPromises, ok := gt.peerPromises[p] - if ok { - delete(peerPromises, mid) - if len(peerPromises) == 0 { - delete(gt.peerPromises, p) + + // delete the promise for all peers that promised it, as they have no way to fulfill it. + for p := range promises { + peerPromises, ok := gt.peerPromises[p] + if ok { + delete(peerPromises, mid) + if len(peerPromises) == 0 { + delete(gt.peerPromises, p) + } } } }