Browse Source

Merge pull request #8962 from sledgehammer999/suppress_errors

Suppress multiple I/O errors for the same torrent
adaptive-webui-19844
sledgehammer999 6 years ago committed by GitHub
parent
commit
7c6a5afbff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      src/base/bittorrent/session.cpp
  2. 4
      src/base/bittorrent/session.h

16
src/base/bittorrent/session.cpp

@ -370,11 +370,16 @@ Session::Session(QObject *parent)
, m_numResumeData(0) , m_numResumeData(0)
, m_extraLimit(0) , m_extraLimit(0)
, m_useProxy(false) , m_useProxy(false)
, m_recentErroredTorrentsTimer(new QTimer(this))
{ {
Logger *const logger = Logger::instance(); Logger *const logger = Logger::instance();
initResumeFolder(); initResumeFolder();
m_recentErroredTorrentsTimer->setSingleShot(true);
m_recentErroredTorrentsTimer->setInterval(1000);
connect(m_recentErroredTorrentsTimer, &QTimer::timeout, this, [this]() { m_recentErroredTorrents.clear(); });
m_seedingLimitTimer = new QTimer(this); m_seedingLimitTimer = new QTimer(this);
m_seedingLimitTimer->setInterval(10000); m_seedingLimitTimer->setInterval(10000);
connect(m_seedingLimitTimer, &QTimer::timeout, this, &Session::processShareLimits); connect(m_seedingLimitTimer, &QTimer::timeout, this, &Session::processShareLimits);
@ -4184,11 +4189,16 @@ void Session::handleFileErrorAlert(libt::file_error_alert *p)
// NOTE: Check this function! // NOTE: Check this function!
TorrentHandle *const torrent = m_torrents.value(p->handle.info_hash()); TorrentHandle *const torrent = m_torrents.value(p->handle.info_hash());
if (torrent) { if (torrent) {
QString msg = QString::fromStdString(p->message()); const InfoHash hash = torrent->hash();
Logger::instance()->addMessage(tr("An I/O error occurred, '%1' paused. %2") if (!m_recentErroredTorrents.contains(hash)) {
.arg(torrent->name(), msg)); m_recentErroredTorrents.insert(hash);
const QString msg = QString::fromStdString(p->message());
LogMsg(tr("An I/O error occurred, '%1' paused. %2").arg(torrent->name(), msg));
emit fullDiskError(torrent, msg); emit fullDiskError(torrent, msg);
} }
m_recentErroredTorrentsTimer->start();
}
} }
void Session::handlePortmapWarningAlert(libt::portmap_error_alert *p) void Session::handlePortmapWarningAlert(libt::portmap_error_alert *p)

4
src/base/bittorrent/session.h

@ -761,6 +761,10 @@ namespace BitTorrent
QStringMap m_categories; QStringMap m_categories;
QSet<QString> m_tags; QSet<QString> m_tags;
// I/O errored torrents
QSet<InfoHash> m_recentErroredTorrents;
QTimer *m_recentErroredTorrentsTimer;
#if LIBTORRENT_VERSION_NUM < 10100 #if LIBTORRENT_VERSION_NUM < 10100
QMutex m_alertsMutex; QMutex m_alertsMutex;
QWaitCondition m_alertsWaitCondition; QWaitCondition m_alertsWaitCondition;

Loading…
Cancel
Save