fixed issue with disk read cache not being cleared when removing torrents
This commit is contained in:
parent
17750035ea
commit
59deff7a44
|
@ -105,6 +105,7 @@
|
||||||
* added info_hash to torrent_deleted_alert
|
* added info_hash to torrent_deleted_alert
|
||||||
* improved LSD performance and made the interval configurable
|
* improved LSD performance and made the interval configurable
|
||||||
* improved UDP tracker support by caching connect tokens
|
* improved UDP tracker support by caching connect tokens
|
||||||
|
* fixed issue with disk read cache not being cleared when removing torrents
|
||||||
|
|
||||||
release 0.14.9
|
release 0.14.9
|
||||||
|
|
||||||
|
|
|
@ -763,6 +763,7 @@ namespace libtorrent
|
||||||
|
|
||||||
void on_files_deleted(int ret, disk_io_job const& j);
|
void on_files_deleted(int ret, disk_io_job const& j);
|
||||||
void on_files_released(int ret, disk_io_job const& j);
|
void on_files_released(int ret, disk_io_job const& j);
|
||||||
|
void on_torrent_aborted(int ret, disk_io_job const& j);
|
||||||
void on_torrent_paused(int ret, disk_io_job const& j);
|
void on_torrent_paused(int ret, disk_io_job const& j);
|
||||||
void on_storage_moved(int ret, disk_io_job const& j);
|
void on_storage_moved(int ret, disk_io_job const& j);
|
||||||
void on_save_resume_data(int ret, disk_io_job const& j);
|
void on_save_resume_data(int ret, disk_io_job const& j);
|
||||||
|
|
|
@ -1650,6 +1650,25 @@ namespace libtorrent
|
||||||
post_callback(i->second.callback, i->second, -3);
|
post_callback(i->second.callback, i->second, -3);
|
||||||
sorted_read_jobs.erase(i++);
|
sorted_read_jobs.erase(i++);
|
||||||
}
|
}
|
||||||
|
jl.unlock();
|
||||||
|
|
||||||
|
mutex_t::scoped_lock l(m_piece_mutex);
|
||||||
|
|
||||||
|
for (cache_t::iterator i = m_read_pieces.begin();
|
||||||
|
i != m_read_pieces.end();)
|
||||||
|
{
|
||||||
|
if (i->storage == j.storage)
|
||||||
|
{
|
||||||
|
free_piece(*i, l);
|
||||||
|
i = m_read_pieces.erase(i);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
l.unlock();
|
||||||
|
release_memory();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case disk_io_job::abort_thread:
|
case disk_io_job::abort_thread:
|
||||||
|
|
|
@ -2391,11 +2391,14 @@ namespace libtorrent
|
||||||
// disconnect all peers and close all
|
// disconnect all peers and close all
|
||||||
// files belonging to the torrents
|
// files belonging to the torrents
|
||||||
disconnect_all(errors::torrent_aborted);
|
disconnect_all(errors::torrent_aborted);
|
||||||
|
|
||||||
|
// post a message to the main thread to destruct
|
||||||
|
// the torrent object from there
|
||||||
if (m_owning_storage.get())
|
if (m_owning_storage.get())
|
||||||
{
|
{
|
||||||
m_storage->async_release_files(
|
|
||||||
bind(&torrent::on_files_released, shared_from_this(), _1, _2));
|
|
||||||
m_storage->abort_disk_io();
|
m_storage->abort_disk_io();
|
||||||
|
m_storage->async_release_files(
|
||||||
|
boost::bind(&torrent::on_torrent_aborted, shared_from_this(), _1, _2));
|
||||||
}
|
}
|
||||||
|
|
||||||
dequeue_torrent_check();
|
dequeue_torrent_check();
|
||||||
|
@ -2503,6 +2506,12 @@ namespace libtorrent
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void torrent::on_torrent_aborted(int ret, disk_io_job const& j)
|
||||||
|
{
|
||||||
|
// the torrent should be completely shut down now, and the
|
||||||
|
// destructor has to be called from the main thread
|
||||||
|
}
|
||||||
|
|
||||||
void torrent::on_save_resume_data(int ret, disk_io_job const& j)
|
void torrent::on_save_resume_data(int ret, disk_io_job const& j)
|
||||||
{
|
{
|
||||||
mutex::scoped_lock l(m_ses.m_mutex);
|
mutex::scoped_lock l(m_ses.m_mutex);
|
||||||
|
|
Loading…
Reference in New Issue