From: Matt Joiner Date: Wed, 13 Jun 2018 00:53:11 +0000 (+1000) Subject: Allow adding duplicate connections X-Git-Tag: v1.0.0~127^2~31 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=90f84bda71fbbccec7fb05d69d948cb937d014e4;p=btrtrc.git 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. --- 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() {