Skip to content

Commit cda0b60

Browse files
committed
Avoid redundant requests of announce entries from libtorrent
1 parent 2d1c4fc commit cda0b60

File tree

2 files changed

+9
-19
lines changed

2 files changed

+9
-19
lines changed

src/base/bittorrent/sessionimpl.cpp

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5541,8 +5541,6 @@ void SessionImpl::readAlerts()
55415541

55425542
// Some torrents may become "finished" after different alerts handling.
55435543
processPendingFinishedTorrents();
5544-
5545-
processTrackerStatuses();
55465544
}
55475545

55485546
void SessionImpl::handleAddTorrentAlert(const lt::add_torrent_alert *alert)
@@ -6232,7 +6230,10 @@ void SessionImpl::handleTrackerAlert(const lt::tracker_alert *alert)
62326230
if (!torrent)
62336231
return;
62346232

6233+
const auto prevSize = m_updatedTrackerStatuses.size();
62356234
QMap<int, int> &updateInfo = m_updatedTrackerStatuses[torrent->nativeHandle()][std::string(alert->tracker_url())][alert->local_endpoint];
6235+
if (prevSize < m_updatedTrackerStatuses.size())
6236+
updateTrackerEntryStatuses(torrent->nativeHandle());
62366237

62376238
if (alert->type() == lt::tracker_reply_alert::alert_type)
62386239
{
@@ -6294,17 +6295,6 @@ void SessionImpl::handleTorrentConflictAlert(const lt::torrent_conflict_alert *a
62946295
}
62956296
#endif
62966297

6297-
void SessionImpl::processTrackerStatuses()
6298-
{
6299-
if (m_updatedTrackerStatuses.isEmpty())
6300-
return;
6301-
6302-
for (auto it = m_updatedTrackerStatuses.cbegin(); it != m_updatedTrackerStatuses.cend(); ++it)
6303-
updateTrackerEntryStatuses(it.key(), it.value());
6304-
6305-
m_updatedTrackerStatuses.clear();
6306-
}
6307-
63086298
void SessionImpl::saveStatistics() const
63096299
{
63106300
if (!m_isStatisticsDirty)
@@ -6329,20 +6319,21 @@ void SessionImpl::loadStatistics()
63296319
m_previouslyUploaded = value[u"AlltimeUL"_s].toLongLong();
63306320
}
63316321

6332-
void SessionImpl::updateTrackerEntryStatuses(lt::torrent_handle torrentHandle, QHash<std::string, QHash<lt::tcp::endpoint, QMap<int, int>>> updatedTrackers)
6322+
void SessionImpl::updateTrackerEntryStatuses(lt::torrent_handle torrentHandle)
63336323
{
6334-
invokeAsync([this, torrentHandle = std::move(torrentHandle), updatedTrackers = std::move(updatedTrackers)]() mutable
6324+
invokeAsync([this, torrentHandle = std::move(torrentHandle)]() mutable
63356325
{
63366326
try
63376327
{
63386328
std::vector<lt::announce_entry> nativeTrackers = torrentHandle.trackers();
6339-
invoke([this, torrentHandle, nativeTrackers = std::move(nativeTrackers)
6340-
, updatedTrackers = std::move(updatedTrackers)]
6329+
invoke([this, torrentHandle, nativeTrackers = std::move(nativeTrackers)]
63416330
{
63426331
TorrentImpl *torrent = m_torrents.value(torrentHandle.info_hash());
63436332
if (!torrent || torrent->isStopped())
63446333
return;
63456334

6335+
QHash<std::string, QHash<lt::tcp::endpoint, QMap<int, int>>> updatedTrackers = m_updatedTrackerStatuses.take(torrentHandle);
6336+
63466337
QHash<QString, TrackerEntryStatus> trackers;
63476338
trackers.reserve(updatedTrackers.size());
63486339
for (const lt::announce_entry &announceEntry : nativeTrackers)

src/base/bittorrent/sessionimpl.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,6 @@ namespace BitTorrent
546546
void populateAdditionalTrackers();
547547
void enableIPFilter();
548548
void disableIPFilter();
549-
void processTrackerStatuses();
550549
void processTorrentShareLimits(TorrentImpl *torrent);
551550
void populateExcludedFileNamesRegExpList();
552551
void prepareStartup();
@@ -610,7 +609,7 @@ namespace BitTorrent
610609
void saveStatistics() const;
611610
void loadStatistics();
612611

613-
void updateTrackerEntryStatuses(lt::torrent_handle torrentHandle, QHash<std::string, QHash<lt::tcp::endpoint, QMap<int, int>>> updatedTrackers);
612+
void updateTrackerEntryStatuses(lt::torrent_handle torrentHandle);
614613

615614
void handleRemovedTorrent(const TorrentID &torrentID, const QString &partfileRemoveError = {});
616615

0 commit comments

Comments
 (0)