diff --git a/libtorrent/include/libtorrent/alert_types.hpp b/libtorrent/include/libtorrent/alert_types.hpp index e6ade9a26..672096466 100755 --- a/libtorrent/include/libtorrent/alert_types.hpp +++ b/libtorrent/include/libtorrent/alert_types.hpp @@ -223,7 +223,7 @@ namespace libtorrent { block_downloading_alert( const torrent_handle& h - , std::string& speedmsg + , char const* speedmsg , int block_num , int piece_num , const std::string& msg) @@ -384,3 +384,4 @@ namespace libtorrent #endif + diff --git a/libtorrent/include/libtorrent/piece_picker.hpp b/libtorrent/include/libtorrent/piece_picker.hpp index 3912136b8..66c91e2ab 100755 --- a/libtorrent/include/libtorrent/piece_picker.hpp +++ b/libtorrent/include/libtorrent/piece_picker.hpp @@ -207,7 +207,6 @@ namespace libtorrent int add_blocks(std::vector const& piece_list , const std::vector& pieces , std::vector& interesting_blocks - , std::vector& backup_blocks , int num_blocks, int prefer_whole_pieces , void* peer, std::vector const& ignore) const; @@ -457,3 +456,4 @@ namespace libtorrent #endif // TORRENT_PIECE_PICKER_HPP_INCLUDED + diff --git a/libtorrent/src/peer_connection.cpp b/libtorrent/src/peer_connection.cpp index 3f1fe700d..410197372 100755 --- a/libtorrent/src/peer_connection.cpp +++ b/libtorrent/src/peer_connection.cpp @@ -1630,7 +1630,7 @@ namespace libtorrent piece_picker::piece_state_t state; peer_speed_t speed = peer_speed(); - std::string speedmsg; + char const* speedmsg = 0; if (speed == fast) { speedmsg = "fast"; @@ -1648,7 +1648,7 @@ namespace libtorrent } t->picker().mark_as_downloading(block, peer_info_struct(), state); - if (t->alerts().should_post(alert::info)) + if (t->alerts().should_post(alert::info)) { t->alerts().post_alert(block_downloading_alert(t->get_handle(), speedmsg, block.block_index, block.piece_index, "block downloading")); @@ -3003,3 +3003,4 @@ namespace libtorrent } } + diff --git a/libtorrent/src/piece_picker.cpp b/libtorrent/src/piece_picker.cpp index ef55d5a12..d2eb652fd 100755 --- a/libtorrent/src/piece_picker.cpp +++ b/libtorrent/src/piece_picker.cpp @@ -1149,13 +1149,13 @@ namespace libtorrent if (!suggested_bucket.empty()) { num_blocks = add_blocks(suggested_bucket, pieces - , interesting_blocks, backup_blocks, num_blocks + , interesting_blocks, num_blocks , prefer_whole_pieces, peer, empty_vector); if (num_blocks == 0) break; } } num_blocks = add_blocks(*bucket, pieces - , interesting_blocks, backup_blocks, num_blocks + , interesting_blocks, num_blocks , prefer_whole_pieces, peer, suggested_bucket); assert(num_blocks >= 0); } @@ -1193,12 +1193,12 @@ namespace libtorrent if (piece == start_piece) return; } - 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) { + assert(m_piece_map[piece].downloading == false); + assert(m_piece_map[k].priority(m_sequenced_download_threshold) > 0); int num_blocks_in_piece = blocks_in_piece(k); if (prefer_whole_pieces == 0 && num_blocks_in_piece > num_blocks) num_blocks_in_piece = num_blocks; @@ -1263,7 +1263,6 @@ namespace libtorrent int piece_picker::add_blocks(std::vector const& piece_list , std::vector const& pieces , std::vector& interesting_blocks - , std::vector& backup_blocks , int num_blocks, int prefer_whole_pieces , void* peer, std::vector const& ignore) const { @@ -1286,6 +1285,7 @@ namespace libtorrent int num_blocks_in_piece = blocks_in_piece(*i); assert(m_piece_map[*i].downloading == 0); + assert(m_piece_map[*i].priority(m_sequenced_download_threshold) > 0); // pick a new piece if (prefer_whole_pieces == 0) @@ -1302,6 +1302,7 @@ namespace libtorrent boost::tie(start, end) = expand_piece(*i, prefer_whole_pieces, pieces); for (int k = start; k < end; ++k) { + assert(m_piece_map[k].priority(m_sequenced_download_threshold) > 0); num_blocks_in_piece = blocks_in_piece(k); for (int j = 0; j < num_blocks_in_piece; ++j) { @@ -1310,7 +1311,7 @@ namespace libtorrent } } } - if (num_blocks <= 0) return num_blocks < 0 ? 0 : num_blocks; + if (num_blocks <= 0) return 0; } return num_blocks; } @@ -1338,6 +1339,8 @@ namespace libtorrent // pieces that only they have downloaded/requested from if (on_parole && !exclusive) continue; + if (prefer_whole_pieces > 0 && !exclusive_active) continue; + for (int j = 0; j < num_blocks_in_piece; ++j) { // ignore completed blocks and already requested blocks @@ -1377,6 +1380,7 @@ namespace libtorrent assert(num_blocks >= 0 || prefer_whole_pieces > 0); if (num_blocks <= 0) return 0; + if (on_parole) return num_blocks; interesting_blocks.insert(interesting_blocks.end() , backup_blocks.begin(), backup_blocks.end()); @@ -1785,3 +1789,4 @@ namespace libtorrent } +