From 7bbd9a02a091e57a4b5913b202d1f5967baf4bce Mon Sep 17 00:00:00 2001 From: rakshasa Date: Sat, 31 May 2025 23:04:41 +0200 Subject: [PATCH] Proper handling of DownloadList::clear(). --- src/core/download_list.cc | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/core/download_list.cc b/src/core/download_list.cc index 3be0d609..3c23f625 100644 --- a/src/core/download_list.cc +++ b/src/core/download_list.cc @@ -43,14 +43,27 @@ DownloadList::check_contains([[maybe_unused]] Download* d) { void DownloadList::clear() { + int error_count = 0; + while (!empty()) { auto download = back(); - base_type::pop_back(); - close(download); - torrent::download_remove(*download->download()); - delete download; + try { + close(download); + base_type::pop_back(); + + torrent::download_remove(*download->download()); + delete download; + + } catch (torrent::internal_error& e) { + lt_log_print(torrent::LOG_ERROR, "DownloadList::clear() failed to close or remove download: %s", e.what()); + error_count++; + continue; + } } + + if (error_count > 0) + throw torrent::internal_error("DownloadList::clear() failed to close or remove " + std::to_string(error_count) + " downloads."); } void