Просмотр исходного кода

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
Tatsuhiro Tsujikawa 15 лет назад
Родитель
Сommit
e5e561afba
3 измененных файлов с 23 добавлено и 7 удалено
  1. 8 0
      ChangeLog
  2. 14 7
      src/RequestGroupMan.cc
  3. 1 0
      src/XmlRpcMethodImpl.cc

+ 8 - 0
ChangeLog

@@ -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>
 
 	Added aria2.forceRemove XML-RPC method.

+ 14 - 7
src/RequestGroupMan.cc

@@ -106,18 +106,27 @@ void RequestGroupMan::addRequestGroup
 void RequestGroupMan::addReservedGroup
 (const std::vector<SharedHandle<RequestGroup> >& groups)
 {
+  if(_reservedGroups.empty()) {
+    requestQueueCheck();
+  }
   _reservedGroups.insert(_reservedGroups.end(), groups.begin(), groups.end());
 }
 
 void RequestGroupMan::addReservedGroup
 (const SharedHandle<RequestGroup>& group)
 {
+  if(_reservedGroups.empty()) {
+    requestQueueCheck();
+  }
   _reservedGroups.push_back(group);
 }
 
 void RequestGroupMan::insertReservedGroup
 (size_t pos, const std::vector<SharedHandle<RequestGroup> >& 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<RequestGroup>& 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<SharedHandle<RequestGroup> >& _reservedGroups;
   std::deque<SharedHandle<DownloadResult> >& _downloadResults;
   Logger* _logger;
 
@@ -326,10 +337,8 @@ private:
 public:
   ProcessStoppedRequestGroup
   (DownloadEngine* e,
-   std::deque<SharedHandle<RequestGroup> >& reservedGroups,
    std::deque<SharedHandle<DownloadResult> >& 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<unsigned long>(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<SharedHandle<RequestGroup> >::iterator i =
     std::remove_if(_requestGroups.begin(),

+ 1 - 0
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;
 }