From c7592a6dc825a9931e962407a932f0706aa66bfd Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Mon, 27 Aug 2007 10:06:13 +0000 Subject: [PATCH] - prevent downloadFromUrl flooding --- Changelog | 1 + TODO | 1 + src/downloadThread.h | 13 +++++++++++++ 3 files changed, 15 insertions(+) diff --git a/Changelog b/Changelog index f0c51f7c2..4803a0ece 100644 --- a/Changelog +++ b/Changelog @@ -50,6 +50,7 @@ - BUGFIX: Improved incremental download - BUGFIX: Improved unicode support - BUGFIX: Made torrent deletion from hard-drive safer + - BUGFIX: Prevent downloadFromUrl flooding - COSMETIC: Redesigned torrent properties a little - COSMETIC: Redesigned options a little - COSMETIC: Display more logs messages concerning features diff --git a/TODO b/TODO index ac60a6ef1..c615b851a 100644 --- a/TODO +++ b/TODO @@ -80,3 +80,4 @@ beta5->beta6 changelog: - BUGFIX: Fixed a bug when switching from finished to downloading list - BUGFIX: Showing checking progress for paused torrents too - BUGFIX: Fixed progress column sorting on startup +- BUGFIX: Prevent downloadFromUrl flooding diff --git a/src/downloadThread.h b/src/downloadThread.h index d9cd7d225..3703e024e 100644 --- a/src/downloadThread.h +++ b/src/downloadThread.h @@ -135,6 +135,7 @@ class downloadThread : public QThread { private: QStringList url_list; + QStringList downloading_list; QMutex mutex; QWaitCondition condition; bool abort; @@ -160,7 +161,9 @@ class downloadThread : public QThread { void downloadUrl(QString url){ QMutexLocker locker(&mutex); + if(downloading_list.contains(url)) return; url_list << url; + downloading_list << url; if(!isRunning()){ start(); }else{ @@ -195,6 +198,11 @@ class downloadThread : public QThread { subThreads.removeAt(index); delete st; emit downloadFinished(url, path); + mutex.lock(); + index = downloading_list.indexOf(url); + Q_ASSERT(index != -1); + downloading_list.removeAt(index); + mutex.unlock(); } void propagateDownloadFailure(subDownloadThread* st, QString url, QString reason){ @@ -203,6 +211,11 @@ class downloadThread : public QThread { subThreads.removeAt(index); delete st; emit downloadFailure(url, reason); + mutex.lock(); + index = downloading_list.indexOf(url); + Q_ASSERT(index != -1); + downloading_list.removeAt(index); + mutex.unlock(); } };