From 9e27e33c9949b2afb2a74cb239fbedd962aca4a4 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Thu, 14 Dec 2006 16:12:31 +0000 Subject: [PATCH] added some asserts and updated changelog --- ChangeLog | 1 + src/peer_connection.cpp | 20 ++++++++++++++++++-- src/torrent.cpp | 32 +++++++++++++++++++------------- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index d1a25b2c8..fadd6a10f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ + * fixed bug in DHT code which would send incorrect announce messages. * fixed bug where the http header parser was case sensitive to the header names. * Implemented an optmization which frees the piece_picker once a torrent diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp index e940ac05b..db5e630d2 100755 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -1129,6 +1129,19 @@ namespace libtorrent assert(verified); t->completed(); } + +#ifndef NDEBUG + + size_type total_done, total_wanted; + boost::tie(total_done, total_wanted) = t->bytes_done(); + if (t->is_seed()) + assert(total_done == t->torrent_file().total_size()); + else + assert(total_done != t->torrent_file().total_size()); + + t->check_invariant(); +#endif + } #ifndef NDEBUG @@ -1481,8 +1494,11 @@ namespace libtorrent t->remove_peer(this); #ifndef NDEBUG - assert(m_download_queue.empty()); - assert(m_request_queue.empty()); + if (!t->is_seed()) + { + assert(m_download_queue.empty()); + assert(m_request_queue.empty()); + } #endif m_torrent.reset(); } diff --git a/src/torrent.cpp b/src/torrent.cpp index 673e5cc8d..a5db623f8 100755 --- a/src/torrent.cpp +++ b/src/torrent.cpp @@ -729,7 +729,14 @@ namespace libtorrent { int corr = 0; if (m_have_pieces[i->index]) continue; -// assert(!m_have_pieces[i->index]); + +#ifndef NDEBUG + for (std::vector::const_iterator j = boost::next(i); + j != dl_queue.end(); ++j) + { + assert(j->index != i->index); + } +#endif for (int j = 0; j < blocks_per_piece; ++j) { @@ -785,12 +792,18 @@ namespace libtorrent if (!m_picker->is_filtered(i->first.piece_index)) wanted_done += i->second; } + assert(total_done >= wanted_done); return make_tuple(total_done, wanted_done); } void torrent::piece_failed(int index) { - INVARIANT_CHECK; + // if the last piece fails the peer connection will still + // think that it has received all of it until this function + // resets the download queue. So, we cannot do the + // invariant check here since it assumes: + // (total_done == m_torrent_file.total_size()) => is_seed() +// INVARIANT_CHECK; assert(m_storage.get()); assert(m_picker.get()); @@ -1461,6 +1474,8 @@ namespace libtorrent } // disconnect all seeds + // TODO: should disconnect all peers that have the pieces we have + // not just seeds std::vector seeds; for (peer_iterator i = m_connections.begin(); i != m_connections.end(); ++i) @@ -1485,14 +1500,6 @@ namespace libtorrent { INVARIANT_CHECK; -/* - if (alerts().should_post(alert::info)) - { - alerts().post_alert(torrent_complete_alert( - get_handle() - , "torrent is complete")); - } -*/ // make the next tracker request // be a completed-event m_event = tracker_request::completed; @@ -1689,7 +1696,7 @@ namespace libtorrent if (valid_metadata()) { - assert(m_have_pieces.size() == m_torrent_file.num_pieces()); + assert(int(m_have_pieces.size()) == m_torrent_file.num_pieces()); } else { @@ -2198,7 +2205,7 @@ namespace libtorrent else st.state = torrent_status::downloading_metadata; -// TODO: add e progress member to the torrent that will be used in this case +// TODO: add a progress member to the torrent that will be used in this case // and that may be set by a plugin // if (m_metadata_size == 0) st.progress = 0.f; // else st.progress = std::min(1.f, m_metadata_progress / (float)m_metadata_size); @@ -2250,7 +2257,6 @@ namespace libtorrent } else if (st.total_wanted_done == st.total_wanted) { - assert(!is_seed()); assert(st.total_done != m_torrent_file.total_size()); st.state = torrent_status::finished; }