From 9ce619eac8c48a24dc26ff7b548157f0832d789b Mon Sep 17 00:00:00 2001 From: sledgehammer999 Date: Mon, 28 May 2018 22:42:01 +0300 Subject: [PATCH] Decrease probability of missing important alerts During startup we can get above 1000 alerts at each pop even with only 30 torrents in the queue. This is because libtorrent will post piece_finished_alert and file_completed_alert for each torrent. These alerts push out of the way the ones we care about. The alert queue will be grown to max only if needed. So we don't use more memory. It will greatly depend on how many torrents a user has in their session. When getting fastresume_rejected_alert we need to act as fast as possible in pausing it, otherwise there's a chance it will begin downloading and writing to disk before we pause it. --- src/base/bittorrent/session.cpp | 12 ++---------- src/base/bittorrent/torrenthandle.cpp | 8 ++------ 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 19ff9714d..441c0e576 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -1354,11 +1354,7 @@ void Session::configure(libtorrent::settings_pack &settingsPack) settingsPack.set_int(libt::settings_pack::active_tracker_limit, -1); settingsPack.set_int(libt::settings_pack::active_dht_limit, -1); settingsPack.set_int(libt::settings_pack::active_lsd_limit, -1); - // 1 active torrent force 2 connections. If you have more active torrents * 2 than connection limit, - // connection limit will get extended. Multiply max connections or active torrents by 10 for queue. - // Ignore -1 values because we don't want to set a max int message queue - settingsPack.set_int(libt::settings_pack::alert_queue_size, std::max(1000, - 10 * std::max(maxActiveTorrents() * 2, maxConnections()))); + settingsPack.set_int(libt::settings_pack::alert_queue_size, std::numeric_limits::max() / 2); // Outgoing ports settingsPack.set_int(libt::settings_pack::outgoing_port, outgoingPortsMin()); @@ -1633,11 +1629,7 @@ void Session::configure(libtorrent::session_settings &sessionSettings) sessionSettings.active_tracker_limit = -1; sessionSettings.active_dht_limit = -1; sessionSettings.active_lsd_limit = -1; - // 1 active torrent force 2 connections. If you have more active torrents * 2 than connection limit, - // connection limit will get extended. Multiply max connections or active torrents by 10 for queue. - // Ignore -1 values because we don't want to set a max int message queue - sessionSettings.alert_queue_size = std::max(1000, - 10 * std::max(maxActiveTorrents() * 2, maxConnections())); + sessionSettings.alert_queue_size = std::numeric_limits::max() / 2; // Outgoing ports sessionSettings.outgoing_ports = std::make_pair(outgoingPortsMin(), outgoingPortsMax()); diff --git a/src/base/bittorrent/torrenthandle.cpp b/src/base/bittorrent/torrenthandle.cpp index aa09fd355..6e59612c2 100644 --- a/src/base/bittorrent/torrenthandle.cpp +++ b/src/base/bittorrent/torrenthandle.cpp @@ -1661,15 +1661,11 @@ void TorrentHandle::handleSaveResumeDataFailedAlert(const libtorrent::save_resum void TorrentHandle::handleFastResumeRejectedAlert(const libtorrent::fastresume_rejected_alert *p) { - qDebug("/!\\ Fast resume failed for %s, reason: %s", qUtf8Printable(name()), p->message().c_str()); - - updateStatus(); if (p->error.value() == libt::errors::mismatching_file_size) { // Mismatching file size (files were probably moved) - LogMsg(tr("File sizes mismatch for torrent '%1', pausing it.").arg(name()), Log::CRITICAL); + pause(); m_hasMissingFiles = true; - if (!isPaused()) - pause(); + LogMsg(tr("File sizes mismatch for torrent '%1', pausing it.").arg(name()), Log::CRITICAL); } else { LogMsg(tr("Fast resume data was rejected for torrent '%1'. Reason: %2. Checking again...")