Browse Source

Merge pull request #8962 from sledgehammer999/suppress_errors

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

18
src/base/bittorrent/session.cpp

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

4
src/base/bittorrent/session.h

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

Loading…
Cancel
Save