From: Matt Joiner Date: Fri, 26 May 2017 03:00:20 +0000 (+1000) Subject: Tidy up the duplicate conn selection code X-Git-Tag: v1.0.0~468 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=296ef76c363ee61600372e4fd1e699d55d373531;p=btrtrc.git Tidy up the duplicate conn selection code --- diff --git a/torrent.go b/torrent.go index 4db2eb31..6da9d46a 100644 --- a/torrent.go +++ b/torrent.go @@ -1305,20 +1305,21 @@ func (t *Torrent) addConnection(c *connection, outgoing bool) bool { } for c0 := range t.conns { if c.PeerID == c0.PeerID { - // Retain the connection from lower peer ID to higher. + // Already connected to a client with that ID. + duplicateClientConns.Add(1) lower := string(t.cl.peerID[:]) < string(c.PeerID[:]) - if (outgoing && lower) || (!outgoing && !lower) { + // Retain the connection from initiated from lower peer ID to + // higher. + if outgoing == lower { + // Close the other one. c0.Close() + // Is it safe to delete from the map while we're iterating + // over it? t.deleteConnection(c0) - duplicateClientConns.Add(1) - log.Printf("Drop connection: %s, %s, %s", t.name(), c0.localAddr(), c0.remoteAddr()) - continue + } else { + // Abandon this one. + return false } - - // Already connected to a client with that ID. - duplicateClientConns.Add(1) - log.Printf("Drop connection: %s, %s, %s", t.name(), c.localAddr(), c.remoteAddr()) - return false } } if len(t.conns) >= t.maxEstablishedConns {