merged streaming fix from RC_0_16
This commit is contained in:
parent
733aafc245
commit
6adbd75db8
|
@ -13,6 +13,8 @@
|
||||||
* fix uTP edge case where udp socket buffer fills up
|
* fix uTP edge case where udp socket buffer fills up
|
||||||
* fix nagle implementation in uTP
|
* fix nagle implementation in uTP
|
||||||
|
|
||||||
|
* fixed streaming piece picking issue
|
||||||
|
|
||||||
0.16.8 release
|
0.16.8 release
|
||||||
|
|
||||||
* make rename_file create missing directories for new filename
|
* make rename_file create missing directories for new filename
|
||||||
|
|
|
@ -8150,23 +8150,39 @@ namespace libtorrent
|
||||||
, ignore, piece_picker::none, 0);
|
, ignore, piece_picker::none, 0);
|
||||||
|
|
||||||
std::vector<pending_block> const& rq = c.request_queue();
|
std::vector<pending_block> const& rq = c.request_queue();
|
||||||
|
std::vector<pending_block> const& dq = c.download_queue();
|
||||||
|
|
||||||
bool added_request = false;
|
bool added_request = false;
|
||||||
|
|
||||||
if (!interesting_blocks.empty() && std::find_if(rq.begin(), rq.end()
|
if (!interesting_blocks.empty())
|
||||||
, has_block(interesting_blocks.front())) != rq.end())
|
|
||||||
{
|
{
|
||||||
c.make_time_critical(interesting_blocks.front());
|
bool already_requested = std::find_if(dq.begin(), dq.end()
|
||||||
added_request = true;
|
, has_block(interesting_blocks.front())) != dq.end();
|
||||||
}
|
if (already_requested)
|
||||||
else if (!interesting_blocks.empty())
|
|
||||||
{
|
|
||||||
if (!c.add_request(interesting_blocks.front(), peer_connection::req_time_critical))
|
|
||||||
{
|
{
|
||||||
peers.erase(p);
|
// TODO: interesting_blocks should ideally not include blocks
|
||||||
|
// that have been requested already
|
||||||
|
interesting_blocks.erase(interesting_blocks.begin());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
added_request = true;
|
|
||||||
|
bool already_in_queue = std::find_if(rq.begin(), rq.end()
|
||||||
|
, has_block(interesting_blocks.front())) != rq.end();
|
||||||
|
|
||||||
|
if (already_in_queue)
|
||||||
|
{
|
||||||
|
c.make_time_critical(interesting_blocks.front());
|
||||||
|
added_request = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!c.add_request(interesting_blocks.front(), peer_connection::req_time_critical))
|
||||||
|
{
|
||||||
|
peers.erase(p);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
added_request = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: if there's been long enough since we requested something
|
// TODO: if there's been long enough since we requested something
|
||||||
|
|
Loading…
Reference in New Issue