From 8454d51ba137a1da97425c523f97fcbc652e44fb Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Sun, 28 Jun 2009 00:32:14 +0000 Subject: [PATCH] fixed rare piece picker bug --- ChangeLog | 1 + src/piece_picker.cpp | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 36df4ed12..e3d26d499 100644 --- a/ChangeLog +++ b/ChangeLog @@ -72,6 +72,7 @@ release 0.14.5 * fixed bug in rename_file(). The new name would not always be saved in the resume data * fixed resume data compatibility with 0.13 + * fixed rare piece-picker bug release 0.14.4 diff --git a/src/piece_picker.cpp b/src/piece_picker.cpp index 4e5e89787..d30598ff6 100644 --- a/src/piece_picker.cpp +++ b/src/piece_picker.cpp @@ -1502,9 +1502,9 @@ namespace libtorrent // skip pieces we can't pick, and suggested pieces // since we've already picked those while (!can_pick(piece, pieces) - && std::find(suggested_pieces.begin() + || std::find(suggested_pieces.begin() , suggested_pieces.end(), piece) - == suggested_pieces.end()) + != suggested_pieces.end()) { ++piece; if (piece == int(m_piece_map.size())) piece = 0; @@ -1513,11 +1513,14 @@ namespace libtorrent } if (done) break; + TORRENT_ASSERT(can_pick(piece, pieces)); + TORRENT_ASSERT(m_piece_map[piece].downloading == false); + int start, end; boost::tie(start, end) = expand_piece(piece, prefer_whole_pieces, pieces); for (int k = start; k < end; ++k) { - TORRENT_ASSERT(m_piece_map[piece].downloading == false); + TORRENT_ASSERT(m_piece_map[k].downloading == false); TORRENT_ASSERT(m_piece_map[k].priority(this) >= 0); int num_blocks_in_piece = blocks_in_piece(k); if (prefer_whole_pieces == 0 && num_blocks_in_piece > num_blocks)