2010-03-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

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
pull/1/head
Tatsuhiro Tsujikawa 2010-03-07 06:46:33 +00:00
parent 41e203bf84
commit e5e561afba
3 changed files with 23 additions and 7 deletions

View File

@ -1,3 +1,11 @@
2010-03-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
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 <t-tujikawa@users.sourceforge.net> 2010-03-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added aria2.forceRemove XML-RPC method. Added aria2.forceRemove XML-RPC method.

View File

@ -106,18 +106,27 @@ void RequestGroupMan::addRequestGroup
void RequestGroupMan::addReservedGroup void RequestGroupMan::addReservedGroup
(const std::vector<SharedHandle<RequestGroup> >& groups) (const std::vector<SharedHandle<RequestGroup> >& groups)
{ {
if(_reservedGroups.empty()) {
requestQueueCheck();
}
_reservedGroups.insert(_reservedGroups.end(), groups.begin(), groups.end()); _reservedGroups.insert(_reservedGroups.end(), groups.begin(), groups.end());
} }
void RequestGroupMan::addReservedGroup void RequestGroupMan::addReservedGroup
(const SharedHandle<RequestGroup>& group) (const SharedHandle<RequestGroup>& group)
{ {
if(_reservedGroups.empty()) {
requestQueueCheck();
}
_reservedGroups.push_back(group); _reservedGroups.push_back(group);
} }
void RequestGroupMan::insertReservedGroup void RequestGroupMan::insertReservedGroup
(size_t pos, const std::vector<SharedHandle<RequestGroup> >& groups) (size_t pos, const std::vector<SharedHandle<RequestGroup> >& groups)
{ {
if(_reservedGroups.empty()) {
requestQueueCheck();
}
_reservedGroups.insert _reservedGroups.insert
(_reservedGroups.begin()+std::min(_reservedGroups.size(), pos), (_reservedGroups.begin()+std::min(_reservedGroups.size(), pos),
groups.begin(), groups.end()); groups.begin(), groups.end());
@ -126,6 +135,9 @@ void RequestGroupMan::insertReservedGroup
void RequestGroupMan::insertReservedGroup void RequestGroupMan::insertReservedGroup
(size_t pos, const SharedHandle<RequestGroup>& group) (size_t pos, const SharedHandle<RequestGroup>& group)
{ {
if(_reservedGroups.empty()) {
requestQueueCheck();
}
_reservedGroups.insert _reservedGroups.insert
(_reservedGroups.begin()+std::min(_reservedGroups.size(), pos), group); (_reservedGroups.begin()+std::min(_reservedGroups.size(), pos), group);
} }
@ -304,7 +316,6 @@ static void executeStopHook
class ProcessStoppedRequestGroup { class ProcessStoppedRequestGroup {
private: private:
DownloadEngine* _e; DownloadEngine* _e;
std::deque<SharedHandle<RequestGroup> >& _reservedGroups;
std::deque<SharedHandle<DownloadResult> >& _downloadResults; std::deque<SharedHandle<DownloadResult> >& _downloadResults;
Logger* _logger; Logger* _logger;
@ -326,10 +337,8 @@ private:
public: public:
ProcessStoppedRequestGroup ProcessStoppedRequestGroup
(DownloadEngine* e, (DownloadEngine* e,
std::deque<SharedHandle<RequestGroup> >& reservedGroups,
std::deque<SharedHandle<DownloadResult> >& downloadResults): std::deque<SharedHandle<DownloadResult> >& downloadResults):
_e(e), _e(e),
_reservedGroups(reservedGroups),
_downloadResults(downloadResults), _downloadResults(downloadResults),
_logger(LogFactory::getInstance()) {} _logger(LogFactory::getInstance()) {}
@ -365,8 +374,7 @@ public:
("Adding %lu RequestGroups as a result of PostDownloadHandler.", ("Adding %lu RequestGroups as a result of PostDownloadHandler.",
static_cast<unsigned long>(nextGroups.size())); static_cast<unsigned long>(nextGroups.size()));
} }
_reservedGroups.insert(_reservedGroups.begin(), _e->_requestGroupMan->insertReservedGroup(0, nextGroups);
nextGroups.begin(), nextGroups.end());
} }
} else { } else {
group->saveControlFile(); group->saveControlFile();
@ -444,8 +452,7 @@ void RequestGroupMan::removeStoppedGroup(DownloadEngine* e)
updateServerStat(); updateServerStat();
std::for_each(_requestGroups.begin(), _requestGroups.end(), std::for_each(_requestGroups.begin(), _requestGroups.end(),
ProcessStoppedRequestGroup(e, _reservedGroups, ProcessStoppedRequestGroup(e, _downloadResults));
_downloadResults));
std::deque<SharedHandle<RequestGroup> >::iterator i = std::deque<SharedHandle<RequestGroup> >::iterator i =
std::remove_if(_requestGroups.begin(), std::remove_if(_requestGroups.begin(),

View File

@ -774,6 +774,7 @@ BDE ChangeGlobalOptionXmlRpcMethod::process
if(option->defined(PREF_MAX_CONCURRENT_DOWNLOADS)) { if(option->defined(PREF_MAX_CONCURRENT_DOWNLOADS)) {
e->_requestGroupMan->setMaxSimultaneousDownloads e->_requestGroupMan->setMaxSimultaneousDownloads
(option->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS)); (option->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS));
e->_requestGroupMan->requestQueueCheck();
} }
return BDE_OK; return BDE_OK;
} }