From 9152bc8712c27273d6acf777063e917e54d0f298 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Wed, 15 Oct 2008 02:18:59 +0000 Subject: [PATCH] fix to peer_connection::unchoke_compare --- src/peer_connection.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp index 564d077c2..7d3fa7464 100644 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -282,11 +282,19 @@ namespace libtorrent TORRENT_ASSERT(p); peer_connection const& rhs = *p; - // first compare how many bytes they've sent us - size_type c1 = m_statistics.total_payload_download() - m_downloaded_at_last_unchoke; - size_type c2 = rhs.m_statistics.total_payload_download() - rhs.m_downloaded_at_last_unchoke; - if (c1 > c2) return true; - if (c1 < c2) return false; + boost::shared_ptr t1 = m_torrent.lock(); + TORRENT_ASSERT(t1); + size_type c1; + size_type c2; + + if (!t1->is_seed()) + { + // first compare how many bytes they've sent us + c1 = m_statistics.total_payload_download() - m_downloaded_at_last_unchoke; + c2 = rhs.m_statistics.total_payload_download() - rhs.m_downloaded_at_last_unchoke; + if (c1 > c2) return true; + if (c1 < c2) return false; + } // if they are equal, compare how much we have uploaded if (m_peer_info) c1 = m_peer_info->total_upload(); @@ -297,10 +305,10 @@ namespace libtorrent // in order to not switch back and forth too often, // unchoked peers must be at least one piece ahead // of a choked peer to be sorted at a lower unchoke-priority - boost::shared_ptr t = m_torrent.lock(); - TORRENT_ASSERT(t); - if (!is_choked()) c1 -= t->torrent_file().piece_length(); - if (!rhs.is_choked()) c2 -= t->torrent_file().piece_length(); + boost::shared_ptr t2 = rhs.associated_torrent().lock(); + TORRENT_ASSERT(t2); + if (!is_choked()) c1 -= t1->torrent_file().piece_length(); + if (!rhs.is_choked()) c2 -= t2->torrent_file().piece_length(); return c1 < c2; }