merged file priority fix from RC_0_16
This commit is contained in:
parent
7223bf17e5
commit
42ee2869b1
|
@ -11,6 +11,7 @@
|
||||||
* 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 file priority vector-overrun
|
||||||
* fix potential packet allocation alignment issue in utp
|
* fix potential packet allocation alignment issue in utp
|
||||||
* make 'close_redudnant_connections' cover more cases
|
* make 'close_redudnant_connections' cover more cases
|
||||||
* set_piece_deadline() also unfilters the piece (if its priority is 0)
|
* set_piece_deadline() also unfilters the piece (if its priority is 0)
|
||||||
|
|
|
@ -1524,6 +1524,9 @@ namespace libtorrent
|
||||||
TORRENT_ASSERT(m_torrent_file->num_files() > 0);
|
TORRENT_ASSERT(m_torrent_file->num_files() > 0);
|
||||||
TORRENT_ASSERT(m_torrent_file->total_size() >= 0);
|
TORRENT_ASSERT(m_torrent_file->total_size() >= 0);
|
||||||
|
|
||||||
|
if (m_file_priority.size() > m_torrent_file->num_files())
|
||||||
|
m_file_priority.resize(m_torrent_file->num_files());
|
||||||
|
|
||||||
#ifdef TORRENT_USE_OPENSSL
|
#ifdef TORRENT_USE_OPENSSL
|
||||||
std::string cert = m_torrent_file->ssl_cert();
|
std::string cert = m_torrent_file->ssl_cert();
|
||||||
if (!cert.empty()) init_ssl(cert);
|
if (!cert.empty()) init_ssl(cert);
|
||||||
|
@ -3975,6 +3978,11 @@ namespace libtorrent
|
||||||
TORRENT_ASSERT(index < m_torrent_file->num_files());
|
TORRENT_ASSERT(index < m_torrent_file->num_files());
|
||||||
TORRENT_ASSERT(index >= 0);
|
TORRENT_ASSERT(index >= 0);
|
||||||
if (index < 0 || index >= m_torrent_file->num_files()) return;
|
if (index < 0 || index >= m_torrent_file->num_files()) return;
|
||||||
|
if (m_file_priority.size() <= index)
|
||||||
|
{
|
||||||
|
if (prio == 1) return;
|
||||||
|
m_file_priority.resize(m_torrent_file->num_files(), 1);
|
||||||
|
}
|
||||||
if (m_file_priority[index] == prio) return;
|
if (m_file_priority[index] == prio) return;
|
||||||
m_file_priority[index] = prio;
|
m_file_priority[index] = prio;
|
||||||
update_piece_priorities();
|
update_piece_priorities();
|
||||||
|
@ -3988,6 +3996,7 @@ namespace libtorrent
|
||||||
TORRENT_ASSERT(index < m_torrent_file->num_files());
|
TORRENT_ASSERT(index < m_torrent_file->num_files());
|
||||||
TORRENT_ASSERT(index >= 0);
|
TORRENT_ASSERT(index >= 0);
|
||||||
if (index < 0 || index >= m_torrent_file->num_files()) return 0;
|
if (index < 0 || index >= m_torrent_file->num_files()) return 0;
|
||||||
|
if (m_file_priority.size() <= index) return 1;
|
||||||
return m_file_priority[index];
|
return m_file_priority[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4001,10 +4010,9 @@ namespace libtorrent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
files->resize(m_torrent_file->num_files());
|
files->resize(m_torrent_file->num_files(), 1);
|
||||||
|
TORRENT_ASSERT(m_file_priority.size() <= m_torrent_file->num_files());
|
||||||
std::copy(m_file_priority.begin(), m_file_priority.end(), files->begin());
|
std::copy(m_file_priority.begin(), m_file_priority.end(), files->begin());
|
||||||
if (m_file_priority.size() < m_torrent_file->num_files())
|
|
||||||
std::fill(files->begin() + m_file_priority.size(), files->end(), 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::update_piece_priorities()
|
void torrent::update_piece_priorities()
|
||||||
|
|
|
@ -50,12 +50,22 @@ void test_running_torrent(boost::intrusive_ptr<torrent_info> info, size_type fil
|
||||||
session ses(fingerprint("LT", 0, 1, 0, 0), std::make_pair(48130, 48140), "0.0.0.0", 0);
|
session ses(fingerprint("LT", 0, 1, 0, 0), std::make_pair(48130, 48140), "0.0.0.0", 0);
|
||||||
ses.set_alert_mask(alert::storage_notification);
|
ses.set_alert_mask(alert::storage_notification);
|
||||||
|
|
||||||
|
std::vector<boost::uint8_t> zeroes;
|
||||||
|
zeroes.resize(1000, 0);
|
||||||
add_torrent_params p;
|
add_torrent_params p;
|
||||||
p.ti = info;
|
p.ti = info;
|
||||||
p.save_path = ".";
|
p.save_path = ".";
|
||||||
|
|
||||||
|
// make sure we correctly handle the case where we pass in
|
||||||
|
// more values than there are files
|
||||||
|
p.file_priorities = &zeroes;
|
||||||
|
|
||||||
error_code ec;
|
error_code ec;
|
||||||
torrent_handle h = ses.add_torrent(p, ec);
|
torrent_handle h = ses.add_torrent(p, ec);
|
||||||
|
|
||||||
|
std::vector<int> ones(info->num_files(), 1);
|
||||||
|
h.prioritize_files(ones);
|
||||||
|
|
||||||
test_sleep(500);
|
test_sleep(500);
|
||||||
torrent_status st = h.status();
|
torrent_status st = h.status();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue