From 90f84bda71fbbccec7fb05d69d948cb937d014e4 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 13 Jun 2018 10:53:11 +1000 Subject: [PATCH] Allow adding duplicate connections I believe this fixes a long-standing race condition when dropping connections to the same peer ID where Clients assume the peer has added connections in the same order. Further commits may address duplicate connections further. --- torrent.go | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/torrent.go b/torrent.go index 91f72da8..2bb5f20b 100644 --- a/torrent.go +++ b/torrent.go @@ -1500,25 +1500,6 @@ func (t *Torrent) addConnection(c *connection) error { if !t.wantConns() { return errors.New("don't want conns") } - for c0 := range t.conns { - if c.PeerID != c0.PeerID { - continue - } - // Already connected to a client with that ID. - preferOutbound := string(t.cl.peerID[:]) < string(c.PeerID[:]) - // Retain the connection from initiated from lower peer ID to higher. - if c0.outgoing == preferOutbound { - return errors.New("existing connection preferred") - } - if c.outgoing != preferOutbound { - return errors.New("prefer older connection") - } - // Close the other one. - c0.Close() - // TODO: Is it safe to delete from the map while we're iterating - // over it? - t.deleteConnection(c0) - } if len(t.conns) >= t.maxEstablishedConns { c := t.worstBadConn() if t.cl.config.Debug && missinggo.CryHeard() { -- 2.48.1