added clear_piece_deadlines() to remove all piece deadlines

This commit is contained in:
Arvid Norberg 2014-05-23 02:23:11 +00:00
parent 4deafb5e29
commit ea77427e07
5 changed files with 28 additions and 0 deletions

View File

@ -1,5 +1,6 @@
1.0 release
* added clear_piece_deadlines() to remove all piece deadlines
* improve queuing logic of inactive torrents (dont_count_slow_torrents)
* expose optimistic unchoke logic to plugins
* fix issue with large UDP packets on windows
@ -52,6 +53,7 @@
* fix uTP edge case where udp socket buffer fills up
* fix nagle implementation in uTP
* added work-around for MingW issue in file I/O
* fixed sparse file detection on windows
* fixed bug in gunzip
* fix to use proxy settings when adding .torrent file from URL

View File

@ -345,6 +345,7 @@ namespace libtorrent
void set_piece_deadline(int piece, int t, int flags);
void reset_piece_deadline(int piece);
void clear_time_critical();
void update_piece_priorities();
void status(torrent_status* st, boost::uint32_t flags);

View File

@ -362,8 +362,12 @@ namespace libtorrent
// ``reset_piece_deadline`` removes the deadline from the piece. If it
// hasn't already been downloaded, it will no longer be considered a
// priority.
//
// ``clear_piece_deadlines()`` removes deadlines on all pieces in
// the torrent. As if reset_piece_deadline() was called on all pieces.
void set_piece_deadline(int index, int deadline, int flags = 0) const;
void reset_piece_deadline(int index) const;
void clear_piece_deadlines() const;
// This sets the bandwidth priority of this torrent. The priority of a
// torrent determines how much bandwidth its peers are assigned when

View File

@ -3827,6 +3827,22 @@ namespace libtorrent
}
}
void torrent::clear_time_critical()
{
for (std::deque<time_critical_piece>::iterator i = m_time_critical_pieces.begin();
i != m_time_critical_pieces.end();)
{
if (i->flags & torrent_handle::alert_when_available)
{
// post an empty read_piece_alert to indicate it failed
m_ses.m_alerts.post_alert(read_piece_alert(
get_handle(), i->piece, error_code(boost::system::errc::operation_canceled, get_system_category())));
}
if (has_picker()) m_picker->set_piece_priority(i->piece, 1);
i = m_time_critical_pieces.erase(i);
}
}
// remove time critical pieces where priority is 0
void torrent::remove_time_critical_pieces(std::vector<int> const& priority)
{

View File

@ -889,6 +889,11 @@ namespace libtorrent
TORRENT_ASYNC_CALL1(reset_piece_deadline, index);
}
void torrent_handle::clear_piece_deadlines() const
{
TORRENT_ASYNC_CALL(clear_time_critical);
}
boost::shared_ptr<torrent> torrent_handle::native_handle() const
{
return m_torrent.lock();