Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:X0F:branches:network
qbittorrent
qbittorrent-pread_disk_io.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File qbittorrent-pread_disk_io.patch of Package qbittorrent
From 36964be692113447afa67470b67a4f2e27beeec3 Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" <glassez@yandex.ru> Date: Tue, 16 Aug 2022 10:50:49 +0300 Subject: [PATCH] Allow to use new disk I/O type --- src/base/bittorrent/customstorage.cpp | 11 +++++++++-- src/base/bittorrent/customstorage.h | 4 +++- src/base/bittorrent/session.cpp | 7 ++++++- src/base/bittorrent/session.h | 3 ++- src/base/bittorrent/torrentinfo.cpp | 5 +---- src/gui/advancedsettings.cpp | 1 + 6 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/base/bittorrent/customstorage.cpp b/src/base/bittorrent/customstorage.cpp index 308bc41ac6fe..d5ad474c0ea9 100644 --- a/src/base/bittorrent/customstorage.cpp +++ b/src/base/bittorrent/customstorage.cpp @@ -36,6 +36,7 @@ #ifdef QBT_USES_LIBTORRENT2 #include <libtorrent/mmap_disk_io.hpp> #include <libtorrent/posix_disk_io.hpp> +#include <libtorrent/pread_disk_io.hpp> #include <libtorrent/session.hpp> std::unique_ptr<lt::disk_interface> customDiskIOConstructor( @@ -44,16 +45,22 @@ std::unique_ptr<lt::disk_interface> customDiskIOConstructor( return std::make_unique<CustomDiskIOThread>(lt::default_disk_io_constructor(ioContext, settings, counters)); } +std::unique_ptr<lt::disk_interface> customMMapDiskIOConstructor( + lt::io_context &ioContext, const lt::settings_interface &settings, lt::counters &counters) +{ + return std::make_unique<CustomDiskIOThread>(lt::mmap_disk_io_constructor(ioContext, settings, counters)); +} + std::unique_ptr<lt::disk_interface> customPosixDiskIOConstructor( lt::io_context &ioContext, const lt::settings_interface &settings, lt::counters &counters) { return std::make_unique<CustomDiskIOThread>(lt::posix_disk_io_constructor(ioContext, settings, counters)); } -std::unique_ptr<lt::disk_interface> customMMapDiskIOConstructor( +std::unique_ptr<lt::disk_interface> customPReadDiskIOConstructor( lt::io_context &ioContext, const lt::settings_interface &settings, lt::counters &counters) { - return std::make_unique<CustomDiskIOThread>(lt::mmap_disk_io_constructor(ioContext, settings, counters)); + return std::make_unique<CustomDiskIOThread>(lt::pread_disk_io_constructor(ioContext, settings, counters)); } CustomDiskIOThread::CustomDiskIOThread(std::unique_ptr<libtorrent::disk_interface> nativeDiskIOThread) diff --git a/src/base/bittorrent/customstorage.h b/src/base/bittorrent/customstorage.h index facbea6df89c..1d70a7448aff 100644 --- a/src/base/bittorrent/customstorage.h +++ b/src/base/bittorrent/customstorage.h @@ -50,9 +50,11 @@ #ifdef QBT_USES_LIBTORRENT2 std::unique_ptr<lt::disk_interface> customDiskIOConstructor( lt::io_context &ioContext, lt::settings_interface const &settings, lt::counters &counters); +std::unique_ptr<lt::disk_interface> customMMapDiskIOConstructor( + lt::io_context &ioContext, lt::settings_interface const &settings, lt::counters &counters); std::unique_ptr<lt::disk_interface> customPosixDiskIOConstructor( lt::io_context &ioContext, lt::settings_interface const &settings, lt::counters &counters); -std::unique_ptr<lt::disk_interface> customMMapDiskIOConstructor( +std::unique_ptr<lt::disk_interface> customPReadDiskIOConstructor( lt::io_context &ioContext, lt::settings_interface const &settings, lt::counters &counters); class CustomDiskIOThread final : public lt::disk_interface diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 6f98f25e897f..91dddafbb7dd 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -1406,6 +1406,9 @@ void Session::initializeNativeSession() #ifdef QBT_USES_LIBTORRENT2 switch (diskIOType()) { + case DiskIOType::MTRW: + sessionParams.disk_io_constructor = customPReadDiskIOConstructor; + break; case DiskIOType::Posix: sessionParams.disk_io_constructor = customPosixDiskIOConstructor; break; @@ -1417,7 +1420,9 @@ void Session::initializeNativeSession() break; } #endif - m_nativeSession = new lt::session(sessionParams, lt::session::paused); +// m_nativeSession = new lt::session(sessionParams, lt::session::paused); + m_nativeSession = new lt::session(sessionParams); + m_nativeSession->pause(); LogMsg(tr("Peer ID: \"%1\"").arg(QString::fromStdString(peerId)), Log::INFO); LogMsg(tr("HTTP User-Agent: \"%1\"").arg(USER_AGENT), Log::INFO); diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index 3fc1c3be7bd3..b33e28d5e0e8 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -132,7 +132,8 @@ namespace BitTorrent { Default = 0, MMap = 1, - Posix = 2 + Posix = 2, + MTRW = 3 }; Q_ENUM_NS(DiskIOType) diff --git a/src/base/bittorrent/torrentinfo.cpp b/src/base/bittorrent/torrentinfo.cpp index 64726c0d4452..ec04040e08f9 100644 --- a/src/base/bittorrent/torrentinfo.cpp +++ b/src/base/bittorrent/torrentinfo.cpp @@ -291,10 +291,7 @@ QVector<QUrl> TorrentInfo::urlSeeds() const urlSeeds.reserve(static_cast<decltype(urlSeeds)::size_type>(nativeWebSeeds.size())); for (const lt::web_seed_entry &webSeed : nativeWebSeeds) - { - if (webSeed.type == lt::web_seed_entry::url_seed) - urlSeeds.append(QUrl(QString::fromStdString(webSeed.url))); - } + urlSeeds.append(QUrl(QString::fromStdString(webSeed.url))); return urlSeeds; } diff --git a/src/gui/advancedsettings.cpp b/src/gui/advancedsettings.cpp index 1f2dda5f5ed2..f3754ca4d8af 100644 --- a/src/gui/advancedsettings.cpp +++ b/src/gui/advancedsettings.cpp @@ -507,6 +507,7 @@ void AdvancedSettings::loadAdvancedSettings() m_comboBoxDiskIOType.addItem(tr("Default"), QVariant::fromValue(BitTorrent::DiskIOType::Default)); m_comboBoxDiskIOType.addItem(tr("Memory mapped files"), QVariant::fromValue(BitTorrent::DiskIOType::MMap)); m_comboBoxDiskIOType.addItem(tr("POSIX-compliant"), QVariant::fromValue(BitTorrent::DiskIOType::Posix)); + m_comboBoxDiskIOType.addItem(tr("Multi-threaded file read/write"), QVariant::fromValue(BitTorrent::DiskIOType::MTRW)); m_comboBoxDiskIOType.setCurrentIndex(m_comboBoxDiskIOType.findData(QVariant::fromValue(session->diskIOType()))); addRow(DISK_IO_TYPE, tr("Disk IO type (requires restart)") + u' ' + makeLink(u"https://www.libtorrent.org/single-page-ref.html#default-disk-io-constructor", u"(?)") , &m_comboBoxDiskIOType);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor