From df8cb53ed28a52c0a8ccbe7e5a03066676cf830a Mon Sep 17 00:00:00 2001 From: rakshasa Date: Fri, 30 May 2025 10:49:28 +0200 Subject: [PATCH] Properly clear out download list before calling torrent::cleanup(). --- src/core/download_list.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/core/download_list.cc b/src/core/download_list.cc index 69a114f6..3be0d609 100644 --- a/src/core/download_list.cc +++ b/src/core/download_list.cc @@ -43,10 +43,14 @@ DownloadList::check_contains([[maybe_unused]] Download* d) { void DownloadList::clear() { - std::for_each(begin(), end(), [&](Download* d) { close(d); }); - std::for_each(begin(), end(), [](Download* d) { delete d; }); + while (!empty()) { + auto download = back(); + base_type::pop_back(); - base_type::clear(); + close(download); + torrent::download_remove(*download->download()); + delete download; + } } void @@ -214,7 +218,7 @@ DownloadList::open_throw(Download* download) { if (download->download()->info()->is_open()) return; - + int openFlags = download->resume_flags(); if (rpc::call_command_value("system.file.allocate")) @@ -253,7 +257,7 @@ void DownloadList::close_quick(Download* download) { lt_log_print_info(torrent::LOG_TORRENT_INFO, download->info(), "download_list", "Closing download quickly."); close(download); - + // Make sure we cancel any tracker requests. This should rather be // handled by some parameter to the close function, or some other // way of giving the client more control of when STOPPED requests