From e5e561afba28db6ed1397556d56fa20748342eb3 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 7 Mar 2010 06:46:33 +0000 Subject: [PATCH] 2010-03-07 Tatsuhiro Tsujikawa Call RequestGroupMan::requestQueueCheck() when max-concurrent-downloads option is changed or new downloads are added/inserted into reserved list. * src/RequestGroupMan.cc * src/XmlRpcMethodImpl.cc --- ChangeLog | 8 ++++++++ src/RequestGroupMan.cc | 21 ++++++++++++++------- src/XmlRpcMethodImpl.cc | 1 + 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index d7d1e40a..298ed21e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-03-07 Tatsuhiro Tsujikawa + + Call RequestGroupMan::requestQueueCheck() when + max-concurrent-downloads option is changed or new downloads are + added/inserted into reserved list. + * src/RequestGroupMan.cc + * src/XmlRpcMethodImpl.cc + 2010-03-07 Tatsuhiro Tsujikawa Added aria2.forceRemove XML-RPC method. diff --git a/src/RequestGroupMan.cc b/src/RequestGroupMan.cc index 17df2a23..c71c77c0 100644 --- a/src/RequestGroupMan.cc +++ b/src/RequestGroupMan.cc @@ -106,18 +106,27 @@ void RequestGroupMan::addRequestGroup void RequestGroupMan::addReservedGroup (const std::vector >& groups) { + if(_reservedGroups.empty()) { + requestQueueCheck(); + } _reservedGroups.insert(_reservedGroups.end(), groups.begin(), groups.end()); } void RequestGroupMan::addReservedGroup (const SharedHandle& group) { + if(_reservedGroups.empty()) { + requestQueueCheck(); + } _reservedGroups.push_back(group); } void RequestGroupMan::insertReservedGroup (size_t pos, const std::vector >& groups) { + if(_reservedGroups.empty()) { + requestQueueCheck(); + } _reservedGroups.insert (_reservedGroups.begin()+std::min(_reservedGroups.size(), pos), groups.begin(), groups.end()); @@ -126,6 +135,9 @@ void RequestGroupMan::insertReservedGroup void RequestGroupMan::insertReservedGroup (size_t pos, const SharedHandle& group) { + if(_reservedGroups.empty()) { + requestQueueCheck(); + } _reservedGroups.insert (_reservedGroups.begin()+std::min(_reservedGroups.size(), pos), group); } @@ -304,7 +316,6 @@ static void executeStopHook class ProcessStoppedRequestGroup { private: DownloadEngine* _e; - std::deque >& _reservedGroups; std::deque >& _downloadResults; Logger* _logger; @@ -326,10 +337,8 @@ private: public: ProcessStoppedRequestGroup (DownloadEngine* e, - std::deque >& reservedGroups, std::deque >& downloadResults): _e(e), - _reservedGroups(reservedGroups), _downloadResults(downloadResults), _logger(LogFactory::getInstance()) {} @@ -365,8 +374,7 @@ public: ("Adding %lu RequestGroups as a result of PostDownloadHandler.", static_cast(nextGroups.size())); } - _reservedGroups.insert(_reservedGroups.begin(), - nextGroups.begin(), nextGroups.end()); + _e->_requestGroupMan->insertReservedGroup(0, nextGroups); } } else { group->saveControlFile(); @@ -444,8 +452,7 @@ void RequestGroupMan::removeStoppedGroup(DownloadEngine* e) updateServerStat(); std::for_each(_requestGroups.begin(), _requestGroups.end(), - ProcessStoppedRequestGroup(e, _reservedGroups, - _downloadResults)); + ProcessStoppedRequestGroup(e, _downloadResults)); std::deque >::iterator i = std::remove_if(_requestGroups.begin(), diff --git a/src/XmlRpcMethodImpl.cc b/src/XmlRpcMethodImpl.cc index 19b7ca5e..ee865152 100644 --- a/src/XmlRpcMethodImpl.cc +++ b/src/XmlRpcMethodImpl.cc @@ -774,6 +774,7 @@ BDE ChangeGlobalOptionXmlRpcMethod::process if(option->defined(PREF_MAX_CONCURRENT_DOWNLOADS)) { e->_requestGroupMan->setMaxSimultaneousDownloads (option->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS)); + e->_requestGroupMan->requestQueueCheck(); } return BDE_OK; }