From cab5edb721ace05ad25bd6089fe54d5ef1d9d43b Mon Sep 17 00:00:00 2001 From: Vladimir Golovnev Date: Mon, 14 Aug 2023 16:02:50 +0300 Subject: [PATCH] Add more precondition checks when handle async operation result PR #19460. --- src/base/bittorrent/sessionimpl.cpp | 2 +- src/base/bittorrent/torrentimpl.cpp | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/base/bittorrent/sessionimpl.cpp b/src/base/bittorrent/sessionimpl.cpp index 6b17cffc7..6416c3b48 100644 --- a/src/base/bittorrent/sessionimpl.cpp +++ b/src/base/bittorrent/sessionimpl.cpp @@ -2909,7 +2909,7 @@ bool SessionImpl::addTorrent_impl(const TorrentDescriptor &source, const AddTorr } void SessionImpl::findIncompleteFiles(const TorrentInfo &torrentInfo, const Path &savePath - , const Path &downloadPath, const PathList &filePaths) const + , const Path &downloadPath, const PathList &filePaths) const { Q_ASSERT(filePaths.isEmpty() || (filePaths.size() == torrentInfo.filesCount())); diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index 6fb3e72bd..f0fd9f414 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -1598,7 +1598,8 @@ void TorrentImpl::applyFirstLastPiecePriority(const bool enabled) void TorrentImpl::fileSearchFinished(const Path &savePath, const PathList &fileNames) { - endReceivedMetadataHandling(savePath, fileNames); + if (m_maintenanceJob == MaintenanceJob::HandleMetadata) + endReceivedMetadataHandling(savePath, fileNames); } TrackerEntry TorrentImpl::updateTrackerEntry(const lt::announce_entry &announceEntry, const QMap &updateInfo) @@ -1630,7 +1631,13 @@ std::shared_ptr TorrentImpl::nativeTorrentInfo() void TorrentImpl::endReceivedMetadataHandling(const Path &savePath, const PathList &fileNames) { + Q_ASSERT(m_maintenanceJob == MaintenanceJob::HandleMetadata); + if (m_maintenanceJob != MaintenanceJob::HandleMetadata) [[unlikely]] + return; + Q_ASSERT(m_filePaths.isEmpty()); + if (!m_filePaths.isEmpty()) [[unlikely]] + m_filePaths.clear(); lt::add_torrent_params &p = m_ltAddTorrentParams; @@ -1639,7 +1646,7 @@ void TorrentImpl::endReceivedMetadataHandling(const Path &savePath, const PathLi m_filePriorities.reserve(filesCount()); const auto nativeIndexes = m_torrentInfo.nativeIndexes(); p.file_priorities = resized(p.file_priorities, metadata->files().num_files() - , LT::toNative(p.file_priorities.empty() ? DownloadPriority::Normal : DownloadPriority::Ignored)); + , LT::toNative(p.file_priorities.empty() ? DownloadPriority::Normal : DownloadPriority::Ignored)); m_completedFiles.fill(static_cast(p.flags & lt::torrent_flags::seed_mode), filesCount()); m_filesProgress.resize(filesCount());