From ee239ddd1e31ec7f451131718b4b57aa65c71b4d Mon Sep 17 00:00:00 2001 From: falco Date: Mon, 23 Jan 2017 15:45:37 +0000 Subject: [PATCH] fix queue overload for add torrent at session start --- src/base/bittorrent/session.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 05941f78c..a2efe7010 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -1039,6 +1039,11 @@ 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()))); // Outgoing ports settingsPack.set_int(libt::settings_pack::outgoing_port, outgoingPortsMin()); @@ -1180,6 +1185,11 @@ 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())); // Outgoing ports sessionSettings.outgoing_ports = std::make_pair(outgoingPortsMin(), outgoingPortsMax()); @@ -3044,13 +3054,19 @@ void Session::startUpTorrents() QByteArray data; } TorrentResumeData; - auto startupTorrent = [this, logger, resumeDataDir](const TorrentResumeData ¶ms) + int resumedTorrentsCount = 0; + const auto startupTorrent = [this, logger, &resumeDataDir, &resumedTorrentsCount](const TorrentResumeData ¶ms) { QString filePath = resumeDataDir.filePath(QString("%1.torrent").arg(params.hash)); qDebug() << "Starting up torrent" << params.hash << "..."; if (!addTorrent_impl(params.addTorrentData, params.magnetUri, TorrentInfo::loadFromFile(filePath), params.data)) logger->addMessage(tr("Unable to resume torrent '%1'.", "e.g: Unable to resume torrent 'hash'.") .arg(params.hash), Log::CRITICAL); + + // process add torrent messages before message queue overflow + if (resumedTorrentsCount % 100 == 0) readAlerts(); + + ++resumedTorrentsCount; }; qDebug("Starting up torrents");