merged streaming fix from RC_0_16

This commit is contained in:
Arvid Norberg 2013-02-11 05:39:03 +00:00
parent 733aafc245
commit 6adbd75db8
2 changed files with 28 additions and 10 deletions

View File

@ -13,6 +13,8 @@
* fix uTP edge case where udp socket buffer fills up
* fix nagle implementation in uTP
* fixed streaming piece picking issue
0.16.8 release
* make rename_file create missing directories for new filename

View File

@ -8150,23 +8150,39 @@ namespace libtorrent
, ignore, piece_picker::none, 0);
std::vector<pending_block> const& rq = c.request_queue();
std::vector<pending_block> const& dq = c.download_queue();
bool added_request = false;
if (!interesting_blocks.empty() && std::find_if(rq.begin(), rq.end()
, has_block(interesting_blocks.front())) != rq.end())
if (!interesting_blocks.empty())
{
c.make_time_critical(interesting_blocks.front());
added_request = true;
}
else if (!interesting_blocks.empty())
{
if (!c.add_request(interesting_blocks.front(), peer_connection::req_time_critical))
bool already_requested = std::find_if(dq.begin(), dq.end()
, has_block(interesting_blocks.front())) != dq.end();
if (already_requested)
{
peers.erase(p);
// TODO: interesting_blocks should ideally not include blocks
// that have been requested already
interesting_blocks.erase(interesting_blocks.begin());
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