forked from premiere/premiere-libtorrent
fix race condition in disk I/O storage class
This commit is contained in:
parent
fe9f877087
commit
14dbd1c92d
|
@ -1,3 +1,4 @@
|
|||
* fix race condition in disk I/O storage class
|
||||
* fix http connection timeout on multi-homed hosts
|
||||
* removed depdendency on boost::uintptr_t for better compatibility
|
||||
* fix memory leak in the disk cache
|
||||
|
|
|
@ -476,6 +476,7 @@ namespace libtorrent
|
|||
// whose bit is 0, we set the file size, to make the file allocated
|
||||
// on disk (in full allocation mode) and just sparsely allocated in
|
||||
// case of sparse allocation mode
|
||||
mutable mutex m_file_created_mutex;
|
||||
mutable bitfield m_file_created;
|
||||
|
||||
bool m_allocate_files;
|
||||
|
|
|
@ -524,7 +524,10 @@ namespace libtorrent
|
|||
m_allocate_files = false;
|
||||
#endif
|
||||
|
||||
m_file_created.resize(files().num_files(), false);
|
||||
{
|
||||
mutex::scoped_lock l(m_file_created_mutex);
|
||||
m_file_created.resize(files().num_files(), false);
|
||||
}
|
||||
|
||||
// first, create all missing directories
|
||||
std::string last_path;
|
||||
|
@ -1494,6 +1497,7 @@ namespace libtorrent
|
|||
|
||||
if (m_allocate_files && (mode & file::rw_mask) != file::read_only)
|
||||
{
|
||||
mutex::scoped_lock l(m_file_created_mutex);
|
||||
if (m_file_created.size() != files().num_files())
|
||||
m_file_created.resize(files().num_files(), false);
|
||||
|
||||
|
@ -1504,10 +1508,11 @@ namespace libtorrent
|
|||
// the file right away, to allocate it on the filesystem.
|
||||
if (m_file_created[file] == false)
|
||||
{
|
||||
m_file_created.set_bit(file);
|
||||
l.unlock();
|
||||
error_code e;
|
||||
boost::int64_t const size = files().file_size(file);
|
||||
h->set_size(size, e);
|
||||
m_file_created.set_bit(file);
|
||||
if (e)
|
||||
{
|
||||
ec.ec = e;
|
||||
|
|
Loading…
Reference in New Issue