From 0a4ee60ea019f1dbf34ca443c520205be3ef1602 Mon Sep 17 00:00:00 2001 From: Vladimir Golovnev Date: Sun, 25 Sep 2022 16:40:16 +0300 Subject: [PATCH] Avoid blocking call when save resume data PR #17755. --- src/base/bittorrent/sessionimpl.cpp | 9 ++++++++- src/base/bittorrent/torrentimpl.cpp | 5 ++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/base/bittorrent/sessionimpl.cpp b/src/base/bittorrent/sessionimpl.cpp index 700fa7588..609dc7cad 100644 --- a/src/base/bittorrent/sessionimpl.cpp +++ b/src/base/bittorrent/sessionimpl.cpp @@ -2854,7 +2854,12 @@ void SessionImpl::saveResumeData() if (isQueueingSystemEnabled()) saveTorrentsQueue(); - generateResumeData(); + + for (const TorrentImpl *torrent : asConst(m_torrents)) + { + torrent->nativeHandle().save_resume_data(lt::torrent_handle::only_if_modified); + ++m_numResumeData; + } while (m_numResumeData > 0) { @@ -2871,6 +2876,8 @@ void SessionImpl::saveResumeData() switch (a->type()) { case lt::save_resume_data_failed_alert::alert_type: + --m_numResumeData; + break; case lt::save_resume_data_alert::alert_type: dispatchTorrentAlert(static_cast(a)); break; diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index 9231af8b3..b563f7d88 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -682,7 +682,7 @@ bool TorrentImpl::connectPeer(const PeerAddress &peerAddress) bool TorrentImpl::needSaveResumeData() const { - return m_nativeHandle.need_save_resume_data(); + return m_nativeStatus.need_save_resume; } void TorrentImpl::saveResumeData() @@ -2006,8 +2006,7 @@ void TorrentImpl::handleFileErrorAlert(const lt::file_error_alert *p) #ifdef QBT_USES_LIBTORRENT2 void TorrentImpl::handleFilePrioAlert(const lt::file_prio_alert *) { - if (m_nativeHandle.need_save_resume_data()) - m_session->handleTorrentNeedSaveResumeData(this); + m_session->handleTorrentNeedSaveResumeData(this); } #endif