소스 검색

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

	Fixed the bug that FillRequestGroupCommand is not invoked when
	RequestGroupMan::createInitialCommand() creates no Command object.
	* src/FillRequestGroupCommand.cc
	* src/RequestGroupMan.cc
Tatsuhiro Tsujikawa 15 년 전
부모
커밋
587be5119c
3개의 변경된 파일17개의 추가작업 그리고 1개의 파일을 삭제
  1. 7 0
      ChangeLog
  2. 7 1
      src/FillRequestGroupCommand.cc
  3. 3 0
      src/RequestGroupMan.cc

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+2010-03-08  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Fixed the bug that FillRequestGroupCommand is not invoked when
+	RequestGroupMan::createInitialCommand() creates no Command object.
+	* src/FillRequestGroupCommand.cc
+	* src/RequestGroupMan.cc
+
 2010-03-08  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Added debug logs.

+ 7 - 1
src/FillRequestGroupCommand.cc

@@ -64,10 +64,16 @@ bool FillRequestGroupCommand::execute()
   SharedHandle<RequestGroupMan> rgman = _e->_requestGroupMan;
   if(rgman->queueCheckRequested()) {
     try {
-      rgman->fillRequestGroupFromReserver(_e);
+      // During adding RequestGroup,
+      // RequestGroupMan::requestQueueCheck() might be called, so
+      // first clear it here.
       rgman->clearQueueCheck();
+      rgman->fillRequestGroupFromReserver(_e);
     } catch(RecoverableException& ex) {
       logger->error(EX_EXCEPTION_CAUGHT, ex);
+      // Re-request queue check to fulfill the requests of all
+      // downloads, some might come after this exception.
+      rgman->requestQueueCheck();
     }
     if(rgman->downloadFinished()) {
       return true;

+ 3 - 0
src/RequestGroupMan.cc

@@ -516,6 +516,9 @@ void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e)
       configureRequestGroup(groupToAdd);
       createInitialCommand(groupToAdd, commands, e);
       groupToAdd->setRequestGroupMan(this);
+      if(commands.empty()) {
+        requestQueueCheck();
+      }
       _requestGroups.push_back(groupToAdd);
       ++count;
       e->addCommand(commands);