From de163293ab3ad56dba28026eedd2329580b359f4 Mon Sep 17 00:00:00 2001 From: PiloUnk <198624632+PiloUnk@users.noreply.github.com> Date: Sat, 14 Mar 2026 19:39:59 +0100 Subject: [PATCH] Avoid missing save scheduling after full save update --- src/session/session_manager.cc | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/session/session_manager.cc b/src/session/session_manager.cc index 954a172a..1f98f1f4 100644 --- a/src/session/session_manager.cc +++ b/src/session/session_manager.cc @@ -104,6 +104,8 @@ SessionManager::save_full_download(core::Download* download) { storer.libtorrent_stream() }; + bool should_schedule = false; + { std::unique_lock lock(m_mutex); @@ -112,16 +114,19 @@ SessionManager::save_full_download(core::Download* download) { if (!m_active) throw torrent::internal_error("SessionManager::save_download() called while not active."); - if (replace_save_request_unsafe(save_request)) - throw torrent::internal_error("SessionManager::save_full_download() replacing existing save request, not supported?"); + if (replace_save_request_unsafe(save_request)) { + LT_LOG("updated pending save request with full save data : download:%p", download); + should_schedule = true; + } else { + m_save_requests.push_back(std::move(save_request)); + m_save_request_counter = m_save_requests.size(); - m_save_requests.push_back(std::move(save_request)); - m_save_request_counter = m_save_requests.size(); - - LT_LOG("queued new full save request : download:%p", download); + LT_LOG("queued new full save request : download:%p", download); + should_schedule = true; + } } - if (!m_processing_saves_callback_scheduled.exchange(true)) + if (should_schedule && !m_processing_saves_callback_scheduled.exchange(true)) session_thread::callback(this, [this]() { process_save_request(); }); }