fix part-file creation race condition (back-port from master)
This commit is contained in:
parent
163e490d8a
commit
0fe2e85fee
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
* fix part-file creation race condition
|
||||||
* fix issue with initializing settings on session construction
|
* fix issue with initializing settings on session construction
|
||||||
* fix issue with receiving interested before metadata
|
* fix issue with receiving interested before metadata
|
||||||
* fix IPv6 tracker announce issue
|
* fix IPv6 tracker announce issue
|
||||||
|
|
|
@ -245,7 +245,7 @@ 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.need_partfile();
|
TORRENT_ASSERT(m_storage.m_part_file);
|
||||||
|
|
||||||
error_code e;
|
error_code e;
|
||||||
peer_request map = m_storage.files().map_file(file_index
|
peer_request map = m_storage.files().map_file(file_index
|
||||||
|
@ -335,7 +335,7 @@ 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.need_partfile();
|
TORRENT_ASSERT(m_storage.m_part_file);
|
||||||
|
|
||||||
error_code e;
|
error_code e;
|
||||||
peer_request map = m_storage.files().map_file(file_index
|
peer_request map = m_storage.files().map_file(file_index
|
||||||
|
@ -412,6 +412,16 @@ namespace libtorrent
|
||||||
m_part_file_name = "." + (params.info
|
m_part_file_name = "." + (params.info
|
||||||
? to_hex(params.info->info_hash().to_string())
|
? to_hex(params.info->info_hash().to_string())
|
||||||
: params.files->name()) + ".parts";
|
: params.files->name()) + ".parts";
|
||||||
|
|
||||||
|
file_storage const& fs = files();
|
||||||
|
for (int i = 0; i < m_file_priority.size(); ++i)
|
||||||
|
{
|
||||||
|
if (m_file_priority[i] == 0 && !fs.pad_file_at(i))
|
||||||
|
{
|
||||||
|
need_partfile();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default_storage::~default_storage()
|
default_storage::~default_storage()
|
||||||
|
@ -498,6 +508,9 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
ec.ec.clear();
|
ec.ec.clear();
|
||||||
m_file_priority[i] = new_prio;
|
m_file_priority[i] = new_prio;
|
||||||
|
|
||||||
|
if (m_file_priority[i] == 0 && !fs.pad_file_at(i))
|
||||||
|
need_partfile();
|
||||||
}
|
}
|
||||||
if (m_part_file) m_part_file->flush_metadata(ec.ec);
|
if (m_part_file) m_part_file->flush_metadata(ec.ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
|
@ -747,7 +760,6 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
error_code ignore;
|
error_code ignore;
|
||||||
m_part_file->flush_metadata(ignore);
|
m_part_file->flush_metadata(ignore);
|
||||||
m_part_file.reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure we don't have the files open
|
// make sure we don't have the files open
|
||||||
|
|
|
@ -123,7 +123,7 @@ void test_transfer(settings_pack const& sett)
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
wait_for_listen(ses1, "ses1");
|
wait_for_listen(ses1, "ses1");
|
||||||
wait_for_listen(ses2, "ses1");
|
wait_for_listen(ses2, "ses2");
|
||||||
|
|
||||||
peer_disconnects = 0;
|
peer_disconnects = 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue