From 296ef76c363ee61600372e4fd1e699d55d373531 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Fri, 26 May 2017 13:00:20 +1000 Subject: [PATCH] Tidy up the duplicate conn selection code --- torrent.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) 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 { -- 2.48.1