summaryrefslogtreecommitdiff
path: root/src/FillRequestGroupCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-03-26 17:12:52 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-03-26 17:20:27 +0900
commitd64089632e82a2548752c7a6baaa68365a795a74 (patch)
tree57fc7b85a8c1290975d58fa4761b04a7695bf7e3 /src/FillRequestGroupCommand.cc
parentc81b1321122e8509b55c94c0cbca0d8d6d319f0c (diff)
parenta7cd943a06b1a5ff4515b57060b84037f8d01f9f (diff)
Merge branch 'master' into random-webseeding
Diffstat (limited to 'src/FillRequestGroupCommand.cc')
-rw-r--r--src/FillRequestGroupCommand.cc30
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;
}