fix issue resuming 1.0.x downloads with a file priority 0
This commit is contained in:
parent
01c41fadcf
commit
91e03c789c
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
* fix issue resuming 1.0.x downloads with a file priority 0
|
||||||
* fix torrent_status::next_announce
|
* fix torrent_status::next_announce
|
||||||
* fix pad-file scalability issue
|
* fix pad-file scalability issue
|
||||||
* made coalesce_reads/coalesce_writes settings take effect on linux and windows
|
* made coalesce_reads/coalesce_writes settings take effect on linux and windows
|
||||||
|
|
|
@ -478,6 +478,14 @@ namespace libtorrent
|
||||||
std::vector<boost::uint8_t> m_file_priority;
|
std::vector<boost::uint8_t> m_file_priority;
|
||||||
std::string m_save_path;
|
std::string m_save_path;
|
||||||
std::string m_part_file_name;
|
std::string m_part_file_name;
|
||||||
|
|
||||||
|
// if this is false, we're not using a part file to store priority-0
|
||||||
|
// pieces, but we instead look for them under their actual file names
|
||||||
|
// this defaults to true, but when checking resume data for a torrent
|
||||||
|
// where we would expect to have a part file, but there isn't one, we set
|
||||||
|
// this to false.
|
||||||
|
bool m_use_part_file;
|
||||||
|
|
||||||
// the file pool is typically stored in
|
// the file pool is typically stored in
|
||||||
// the session, to make all storage
|
// the session, to make all storage
|
||||||
// instances use the same pool
|
// instances use the same pool
|
||||||
|
|
|
@ -243,7 +243,8 @@ namespace libtorrent
|
||||||
int num_bufs = count_bufs(bufs, size);
|
int num_bufs = count_bufs(bufs, size);
|
||||||
|
|
||||||
if (file_index < int(m_storage.m_file_priority.size())
|
if (file_index < int(m_storage.m_file_priority.size())
|
||||||
&& m_storage.m_file_priority[file_index] == 0)
|
&& m_storage.m_file_priority[file_index] == 0
|
||||||
|
&& m_storage.m_use_part_file)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(m_storage.m_part_file);
|
TORRENT_ASSERT(m_storage.m_part_file);
|
||||||
|
|
||||||
|
@ -333,7 +334,8 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_index < int(m_storage.m_file_priority.size())
|
if (file_index < int(m_storage.m_file_priority.size())
|
||||||
&& m_storage.m_file_priority[file_index] == 0)
|
&& m_storage.m_file_priority[file_index] == 0
|
||||||
|
&& m_storage.m_use_part_file)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(m_storage.m_part_file);
|
TORRENT_ASSERT(m_storage.m_part_file);
|
||||||
|
|
||||||
|
@ -401,6 +403,7 @@ namespace libtorrent
|
||||||
|
|
||||||
default_storage::default_storage(storage_params const& params)
|
default_storage::default_storage(storage_params const& params)
|
||||||
: m_files(*params.files)
|
: m_files(*params.files)
|
||||||
|
, m_use_part_file(true)
|
||||||
, m_pool(*params.pool)
|
, m_pool(*params.pool)
|
||||||
, m_allocate_files(params.mode == storage_mode_allocate)
|
, m_allocate_files(params.mode == storage_mode_allocate)
|
||||||
{
|
{
|
||||||
|
@ -1039,6 +1042,21 @@ namespace libtorrent
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if some files have priority 0, we would expect therer to be a part file
|
||||||
|
// as well. If there isn't, it implies we're not using part files and the
|
||||||
|
// original file names are used to store the partial pieces. i.e. 1.0.x
|
||||||
|
// behavior
|
||||||
|
for (int i = 0; i < m_file_priority.size(); ++i)
|
||||||
|
{
|
||||||
|
if (m_file_priority[i] == 0 && !fs.pad_file_at(i))
|
||||||
|
{
|
||||||
|
file_status s;
|
||||||
|
stat_file(combine_path(m_save_path, m_part_file_name), &s, ec.ec);
|
||||||
|
m_use_part_file = !ec;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < file_sizes_ent.list_size(); ++i)
|
for (int i = 0; i < file_sizes_ent.list_size(); ++i)
|
||||||
{
|
{
|
||||||
if (fs.pad_file_at(i)) continue;
|
if (fs.pad_file_at(i)) continue;
|
||||||
|
@ -1046,8 +1064,12 @@ namespace libtorrent
|
||||||
// files with priority zero may not have been saved to disk at their
|
// files with priority zero may not have been saved to disk at their
|
||||||
// expected location, but is likely to be in a partfile. Just exempt it
|
// expected location, but is likely to be in a partfile. Just exempt it
|
||||||
// from checking
|
// from checking
|
||||||
|
// if we don't have a part-file, this may have been downloaded with a
|
||||||
|
// previous version of libtorrent. Then assume the pieces are in the
|
||||||
|
// files they belong in.
|
||||||
if (i < int(m_file_priority.size())
|
if (i < int(m_file_priority.size())
|
||||||
&& m_file_priority[i] == 0)
|
&& m_file_priority[i] == 0
|
||||||
|
&& m_use_part_file)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bdecode_node e = file_sizes_ent.list_at(i);
|
bdecode_node e = file_sizes_ent.list_at(i);
|
||||||
|
|
Loading…
Reference in New Issue