Sync lt 1825

This commit is contained in:
Andrew Resch 2007-12-16 10:15:32 +00:00
parent 6dff50c3f5
commit 58a0506b98
3 changed files with 35 additions and 10 deletions

View File

@ -779,6 +779,10 @@ namespace libtorrent
// the maximum number of connections for this torrent
int m_max_connections;
#ifndef NDEBUG
bool m_files_checked;
#endif
#ifndef TORRENT_DISABLE_EXTENSIONS
typedef std::list<boost::shared_ptr<torrent_plugin> > extension_list_t;

View File

@ -80,10 +80,10 @@ namespace libtorrent
TORRENT_ASSERT(m_blocks_in_last_piece <= m_blocks_per_piece);
// allocate the piece_map to cover all pieces
// and make them invalid (as if though we already had every piece)
// and make them invalid (as if we don't have a single piece)
std::fill(m_piece_map.begin(), m_piece_map.end()
, piece_pos(0, piece_pos::we_have_index));
m_num_have = m_piece_map.size();
, piece_pos(0, 0));
m_num_have = 0;
}
// pieces is a bitmask with the pieces we have
@ -92,20 +92,29 @@ namespace libtorrent
, std::vector<downloading_piece> const& unfinished
, std::vector<int>& verify_pieces)
{
TORRENT_PIECE_PICKER_INVARIANT_CHECK;
#ifndef NDEBUG
m_files_checked_called = true;
#endif
for (std::vector<bool>::const_iterator i = pieces.begin();
i != pieces.end(); ++i)
{
if (*i) continue;
int index = static_cast<int>(i - pieces.begin());
m_piece_map[index].index = 0;
--m_num_have;
if (m_piece_map[index].filtered())
piece_pos& p = m_piece_map[index];
if (*i)
{
++m_num_filtered;
--m_num_have_filtered;
++m_num_have;
p.set_have();
if (p.filtered())
{
++m_num_have_filtered;
TORRENT_ASSERT(m_num_filtered > 0);
--m_num_filtered;
}
}
else
{
p.index = 0;
}
}
@ -283,6 +292,9 @@ namespace libtorrent
void piece_picker::check_invariant(const torrent* t) const
{
TORRENT_ASSERT(sizeof(piece_pos) == 4);
TORRENT_ASSERT(m_num_have >= 0);
TORRENT_ASSERT(m_num_have_filtered >= 0);
TORRENT_ASSERT(m_num_filtered >= 0);
TORRENT_ASSERT(m_piece_info.empty() || m_piece_info[0].empty());

View File

@ -204,6 +204,9 @@ namespace libtorrent
, m_max_connections((std::numeric_limits<int>::max)())
, m_policy(this)
{
#ifndef NDEBUG
m_files_checked = false;
#endif
}
torrent::torrent(
@ -263,6 +266,9 @@ namespace libtorrent
, m_max_connections((std::numeric_limits<int>::max)())
, m_policy(this)
{
#ifndef NDEBUG
m_files_checked = false;
#endif
INVARIANT_CHECK;
if (name) m_name.reset(new std::string(name));
@ -2521,6 +2527,9 @@ namespace libtorrent
}
}
}
#ifndef NDEBUG
m_files_checked = true;
#endif
}
alert_manager& torrent::alerts() const
@ -2658,7 +2667,7 @@ namespace libtorrent
complete = false;
break;
}
if (complete)
if (complete && m_files_checked)
{
disk_io_job ret = m_ses.m_disk_thread.find_job(
m_owning_storage, -1, i->index);