fixed file check ordering to respect the queue position. Fixes #350

This commit is contained in:
Arvid Norberg
2008-06-12 21:22:24 +00:00
parent 295e2a548b
commit 5923ef5b43
2 changed files with 13 additions and 5 deletions

View File

@@ -378,7 +378,8 @@ namespace libtorrent
tracker_manager m_tracker_manager; tracker_manager m_tracker_manager;
torrent_map m_torrents; torrent_map m_torrents;
std::list<boost::shared_ptr<torrent> > m_queued_for_checking; typedef std::list<boost::shared_ptr<torrent> > check_queue_t;
check_queue_t m_queued_for_checking;
// this maps sockets to their peer_connection // this maps sockets to their peer_connection
// object. It is the complete list of all connected // object. It is the complete list of all connected

View File

@@ -1773,10 +1773,17 @@ namespace aux {
void session_impl::done_checking(boost::shared_ptr<torrent> const& t) void session_impl::done_checking(boost::shared_ptr<torrent> const& t)
{ {
TORRENT_ASSERT(m_queued_for_checking.front() == t); check_queue_t::iterator next_check = m_queued_for_checking.begin();
m_queued_for_checking.pop_front(); check_queue_t::iterator done = m_queued_for_checking.end();
if (!m_queued_for_checking.empty()) for (check_queue_t::iterator i = m_queued_for_checking.begin()
m_queued_for_checking.front()->start_checking(); , end(m_queued_for_checking.end()); i != end; ++i)
{
if (*i == t) done = i;
if (next_check == done || (*next_check)->queue_position() > (*i)->queue_position())
next_check = i;
}
if (next_check != done) (*next_check)->start_checking();
m_queued_for_checking.erase(done);
} }
void session_impl::remove_torrent(const torrent_handle& h, int options) void session_impl::remove_torrent(const torrent_handle& h, int options)