forked from premiere/premiere-libtorrent
fix related to the recent piece_picker optimization
This commit is contained in:
parent
ddfadaf6e4
commit
d10f06059d
|
@ -975,12 +975,12 @@ namespace libtorrent
|
||||||
throw protocol_error("got invalid piece packet");
|
throw protocol_error("got invalid piece packet");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using namespace boost::posix_time;
|
||||||
|
|
||||||
// if we're already seeding, don't bother,
|
// if we're already seeding, don't bother,
|
||||||
// just ignore it
|
// just ignore it
|
||||||
if (t->is_seed()) return;
|
if (t->is_seed()) return;
|
||||||
|
|
||||||
using namespace boost::posix_time;
|
|
||||||
|
|
||||||
piece_picker& picker = t->picker();
|
piece_picker& picker = t->picker();
|
||||||
|
|
||||||
piece_block block_finished(p.piece, p.start / t->block_size());
|
piece_block block_finished(p.piece, p.start / t->block_size());
|
||||||
|
@ -1080,21 +1080,22 @@ namespace libtorrent
|
||||||
bool was_finished = picker.num_filtered() + t->num_pieces()
|
bool was_finished = picker.num_filtered() + t->num_pieces()
|
||||||
== t->torrent_file().num_pieces();
|
== t->torrent_file().num_pieces();
|
||||||
|
|
||||||
// if the piece failed, this connection may be closed, and
|
|
||||||
// detached from the torrent. In that case m_torrent will
|
|
||||||
// be set to 0. So, we need to temporarily save it in this function
|
|
||||||
|
|
||||||
// did we just finish the piece?
|
// did we just finish the piece?
|
||||||
if (picker.is_piece_finished(p.piece))
|
if (picker.is_piece_finished(p.piece))
|
||||||
{
|
{
|
||||||
bool verified = t->verify_piece(p.piece);
|
bool verified = t->verify_piece(p.piece);
|
||||||
if (verified)
|
if (verified)
|
||||||
{
|
{
|
||||||
|
// the following call may cause picker to become invalid
|
||||||
|
// in case we just became a seed
|
||||||
t->announce_piece(p.piece);
|
t->announce_piece(p.piece);
|
||||||
assert(t->valid_metadata());
|
assert(t->valid_metadata());
|
||||||
|
// if we jsut became a seed, picker is now invalid, since it
|
||||||
|
// is deallocated by the torrent once it starts seeding
|
||||||
if (!was_finished
|
if (!was_finished
|
||||||
&& picker.num_filtered() + t->num_pieces()
|
&& (t->is_seed()
|
||||||
== t->torrent_file().num_pieces())
|
|| picker.num_filtered() + t->num_pieces()
|
||||||
|
== t->torrent_file().num_pieces()))
|
||||||
{
|
{
|
||||||
// torrent finished
|
// torrent finished
|
||||||
// i.e. all the pieces we're interested in have
|
// i.e. all the pieces we're interested in have
|
||||||
|
|
Loading…
Reference in New Issue