From 252d2207098d1997e67ee9b6f40f84108b158fac Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Fri, 6 Nov 2020 16:23:23 +1100 Subject: [PATCH] Fix initial pex message regression As pointed out by @yarikk https://github.com/anacrolix/torrent/commit/c1d189ed31af99cbf6f10d9ffdc2cc4e19a73b91#r43920706 --- pex.go | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/pex.go b/pex.go index b626850b..85d32667 100644 --- a/pex.go +++ b/pex.go @@ -67,53 +67,43 @@ func (me *pexMsgFactory) addrKey(addr krpc.NodeAddr) string { // Returns whether the entry was added (we can check if we're cancelling out another entry and so // won't hit the limit consuming this event). -func (me *pexMsgFactory) Add(addr krpc.NodeAddr, flags pp.PexPeerFlags) bool { +func (me *pexMsgFactory) Add(addr krpc.NodeAddr, flags pp.PexPeerFlags) { key := me.addrKey(addr) if _, ok := me.dropped[key]; ok { delete(me.dropped, key) - return true - } - if me.DeltaLen() >= pexMaxDelta { - return false + return } if me.added == nil { me.added = make(map[string]pexMsgAdded, pexMaxDelta) } me.added[key] = pexMsgAdded{addr, flags} - return true } // Returns whether the entry was added (we can check if we're cancelling out another entry and so // won't hit the limit consuming this event). -func (me *pexMsgFactory) Drop(addr krpc.NodeAddr) bool { +func (me *pexMsgFactory) Drop(addr krpc.NodeAddr) { key := me.addrKey(addr) if _, ok := me.added[key]; ok { delete(me.added, key) - return true - } - if me.DeltaLen() >= pexMaxDelta { - return false + return } if me.dropped == nil { me.dropped = make(map[string]krpc.NodeAddr, pexMaxDelta) } me.dropped[key] = addr - return true } -// Returns whether the entry was added (we can check if we're cancelling out another entry and so -// won't hit the limit consuming this event). -func (me *pexMsgFactory) addEvent(event pexEvent) bool { +func (me *pexMsgFactory) addEvent(event pexEvent) { addr, ok := nodeAddr(event.addr) if !ok { - return true + return } switch event.t { case pexAdd: - return me.Add(addr, event.f) + me.Add(addr, event.f) case pexDrop: - return me.Drop(addr) + me.Drop(addr) default: panic(event.t) } @@ -218,9 +208,10 @@ func (s *pexState) Genmsg(start int) (pp.PexMsg, int) { var factory pexMsgFactory n := start for _, e := range s.ev[start:] { - if !factory.addEvent(e) { + if start > 0 && factory.DeltaLen() >= pexMaxDelta { break } + factory.addEvent(e) n++ } return factory.PexMsg(), n -- 2.48.1