]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Allow adding duplicate connections
authorMatt Joiner <anacrolix@gmail.com>
Wed, 13 Jun 2018 00:53:11 +0000 (10:53 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 13 Jun 2018 00:53:11 +0000 (10:53 +1000)
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

index 91f72da80d3db8ed830298e016bedd89616625c0..2bb5f20bb9995744b9ab247edc76fe9f78496cdc 100644 (file)
@@ -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() {