diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2016-03-26 17:12:52 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2016-03-26 17:20:27 +0900 |
| commit | d64089632e82a2548752c7a6baaa68365a795a74 (patch) | |
| tree | 57fc7b85a8c1290975d58fa4761b04a7695bf7e3 /src/FillRequestGroupCommand.cc | |
| parent | c81b1321122e8509b55c94c0cbca0d8d6d319f0c (diff) | |
| parent | a7cd943a06b1a5ff4515b57060b84037f8d01f9f (diff) | |
Merge branch 'master' into random-webseeding
Diffstat (limited to 'src/FillRequestGroupCommand.cc')
| -rw-r--r-- | src/FillRequestGroupCommand.cc | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/src/FillRequestGroupCommand.cc b/src/FillRequestGroupCommand.cc index f40c8fe6..421360eb 100644 --- a/src/FillRequestGroupCommand.cc +++ b/src/FillRequestGroupCommand.cc @@ -42,13 +42,12 @@ #include "LogFactory.h" #include "DownloadContext.h" #include "fmt.h" +#include "wallclock.h" namespace aria2 { -FillRequestGroupCommand::FillRequestGroupCommand(cuid_t cuid, - DownloadEngine* e): - Command(cuid), - e_(e) +FillRequestGroupCommand::FillRequestGroupCommand(cuid_t cuid, DownloadEngine* e) + : Command(cuid), e_(e) { setStatusRealtime(); } @@ -57,30 +56,43 @@ FillRequestGroupCommand::~FillRequestGroupCommand() {} bool FillRequestGroupCommand::execute() { - if(e_->isHaltRequested()) { + if (e_->isHaltRequested()) { return true; } auto& rgman = e_->getRequestGroupMan(); - if(rgman->queueCheckRequested()) { - while(rgman->queueCheckRequested()) { + if (rgman->queueCheckRequested()) { + while (rgman->queueCheckRequested()) { try { // During adding RequestGroup, // RequestGroupMan::requestQueueCheck() might be called, so // first clear it here. rgman->clearQueueCheck(); rgman->fillRequestGroupFromReserver(e_); - } catch(RecoverableException& ex) { + } + catch (RecoverableException& ex) { A2_LOG_ERROR_EX(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()) { + if (rgman->downloadFinished()) { return true; } } e_->addRoutineCommand(std::unique_ptr<Command>(this)); + + // let's make sure we come back here every second or so + // if we use the optimize-concurrent-download option + if (rgman->getOptimizeConcurrentDownloads()) { + const auto& now = global::wallclock(); + if (std::chrono::duration_cast<std::chrono::seconds>( + lastExecTime.difference(now)) >= 1_s) { + lastExecTime = now; + rgman->requestQueueCheck(); + } + } + return false; } |
