From 60d7e3ef3085a825d0e64319cfec069ad213f7d5 Mon Sep 17 00:00:00 2001 From: sledgehammer999 Date: Thu, 7 Aug 2014 22:30:54 +0300 Subject: [PATCH] Allow disabling of OS cache. This will prevent RAM increases on Windows when seeding many files. Closes #1699. Conflicts: src/preferences/advancedsettings.h src/preferences/preferences.cpp src/preferences/preferences.h src/qtlibtorrent/qbtsession.cpp --- src/preferences/advancedsettings.h | 9 +++++++-- src/preferences/preferences.h | 8 ++++++++ src/qtlibtorrent/qbtsession.cpp | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/preferences/advancedsettings.h b/src/preferences/advancedsettings.h index 464bb5616..c457ea12f 100644 --- a/src/preferences/advancedsettings.h +++ b/src/preferences/advancedsettings.h @@ -17,7 +17,7 @@ enum AdvSettingsRows {DISK_CACHE, #if LIBTORRENT_VERSION_NUM >= 1610 DISK_CACHE_TTL, #endif - OUTGOING_PORT_MIN, OUTGOING_PORT_MAX, IGNORE_LIMIT_LAN, RECHECK_COMPLETED, LIST_REFRESH, RESOLVE_COUNTRIES, RESOLVE_HOSTS, MAX_HALF_OPEN, SUPER_SEEDING, NETWORK_IFACE, NETWORK_ADDRESS, PROGRAM_NOTIFICATIONS, TRACKER_STATUS, TRACKER_PORT, + OS_CACHE, OUTGOING_PORT_MIN, OUTGOING_PORT_MAX, IGNORE_LIMIT_LAN, RECHECK_COMPLETED, LIST_REFRESH, RESOLVE_COUNTRIES, RESOLVE_HOSTS, MAX_HALF_OPEN, SUPER_SEEDING, NETWORK_IFACE, NETWORK_ADDRESS, PROGRAM_NOTIFICATIONS, TRACKER_STATUS, TRACKER_PORT, #if defined(Q_WS_WIN) || defined(Q_WS_MAC) UPDATE_CHECK, #endif @@ -33,7 +33,7 @@ class AdvancedSettings: public QTableWidget { private: QSpinBox spin_cache, outgoing_ports_min, outgoing_ports_max, spin_list_refresh, spin_maxhalfopen, spin_tracker_port; - QCheckBox cb_ignore_limits_lan, cb_recheck_completed, cb_resolve_countries, cb_resolve_hosts, + QCheckBox cb_os_cache, cb_ignore_limits_lan, cb_recheck_completed, cb_resolve_countries, cb_resolve_hosts, cb_super_seeding, cb_program_notifications, cb_tracker_status, cb_confirm_torrent_deletion, cb_enable_tracker_ext; QComboBox combo_iface; @@ -79,6 +79,8 @@ public slots: #if LIBTORRENT_VERSION_NUM >= 1610 pref.setDiskCacheTTL(spin_cache_ttl.value()); #endif + // Enable OS cache + pref.setOsCache(cb_os_cache.isChecked()); // Outgoing ports pref.setOutgoingPortsMin(outgoing_ports_min.value()); pref.setOutgoingPortsMax(outgoing_ports_max.value()); @@ -198,6 +200,9 @@ private slots: spin_cache_ttl.setSuffix(tr(" s", " seconds")); setRow(DISK_CACHE_TTL, tr("Disk cache expiry interval"), &spin_cache_ttl); #endif + // Enable OS cache + cb_os_cache.setChecked(pref.osCache()); + setRow(OS_CACHE, tr("Enable OS cache"), &cb_os_cache); // Outgoing port Min outgoing_ports_min.setMinimum(0); outgoing_ports_min.setMaximum(65535); diff --git a/src/preferences/preferences.h b/src/preferences/preferences.h index 14b7a6d66..7bd00098b 100755 --- a/src/preferences/preferences.h +++ b/src/preferences/preferences.h @@ -1031,6 +1031,14 @@ public: } #endif + bool osCache() const { + return value("Preferences/Advanced/osCache", true).toBool(); + } + + void setOsCache(bool enable) { + setValue("Preferences/Advanced/osCache", enable); + } + uint outgoingPortsMin() const { return value(QString::fromUtf8("Preferences/Advanced/OutgoingPortsMin"), 0).toUInt(); } diff --git a/src/qtlibtorrent/qbtsession.cpp b/src/qtlibtorrent/qbtsession.cpp index 00e170031..20275683c 100755 --- a/src/qtlibtorrent/qbtsession.cpp +++ b/src/qtlibtorrent/qbtsession.cpp @@ -419,6 +419,9 @@ void QBtSession::configureSession() { sessionSettings.cache_expiry = pref.diskCacheTTL(); #endif qDebug() << "Using a disk cache size of" << cache_size << "MiB"; + session_settings::io_buffer_mode_t mode = pref.osCache() ? session_settings::enable_os_cache : session_settings::disable_os_cache; + sessionSettings.disk_io_read_mode = mode; + sessionSettings.disk_io_write_mode = mode; #if LIBTORRENT_VERSION_NUM >= 1600 sessionSettings.anonymous_mode = pref.isAnonymousModeEnabled(); if (sessionSettings.anonymous_mode) {