]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fix initial pex message regression
authorMatt Joiner <anacrolix@gmail.com>
Fri, 6 Nov 2020 05:23:23 +0000 (16:23 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 8 Nov 2020 12:13:59 +0000 (23:13 +1100)
As pointed out by @yarikk https://github.com/anacrolix/torrent/commit/c1d189ed31af99cbf6f10d9ffdc2cc4e19a73b91#r43920706

pex.go

diff --git a/pex.go b/pex.go
index b626850be4cdc3d173220128247314529ee585cb..85d32667caee12a2ffb0e76eb6895235f0230d67 100644 (file)
--- 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