mirror of https://github.com/aria2/aria2
2008-11-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Quickly terminate idle commands when download finished. * src/AbstractCommand.cc * src/DownloadCommand.cc * src/DownloadEngine.cc * src/DownloadEngine.h * src/SleepCommand.cc * src/SleepCommand.hpull/1/head
parent
05a9313e19
commit
ec2354f3a1
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2008-11-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Quickly terminate idle commands when download finished.
|
||||
* src/AbstractCommand.cc
|
||||
* src/DownloadCommand.cc
|
||||
* src/DownloadEngine.cc
|
||||
* src/DownloadEngine.h
|
||||
* src/SleepCommand.cc
|
||||
* src/SleepCommand.h
|
||||
|
||||
2008-11-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Added the ability to specify output filename and directory in input
|
||||
|
|
|
@ -209,7 +209,8 @@ bool AbstractCommand::prepareForRetry(time_t wait) {
|
|||
e->setNoWait(true);
|
||||
e->commands.push_back(command);
|
||||
} else {
|
||||
SleepCommand* scom = new SleepCommand(cuid, e, command, wait);
|
||||
SleepCommand* scom = new SleepCommand(cuid, e, _requestGroup,
|
||||
command, wait);
|
||||
e->commands.push_back(scom);
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -258,6 +258,8 @@ bool DownloadCommand::prepareForNextSegment() {
|
|||
new CheckIntegrityCommand(e->newCUID(), _requestGroup, e, entry);
|
||||
e->commands.push_back(command);
|
||||
}
|
||||
e->setNoWait(true);
|
||||
e->setRefreshInterval(0);
|
||||
#endif // ENABLE_MESSAGE_DIGEST
|
||||
return true;
|
||||
} else {
|
||||
|
|
|
@ -414,6 +414,7 @@ void AsyncNameResolverEntry::process(fd_set* rfdsPtr, fd_set* wfdsPtr)
|
|||
DownloadEngine::DownloadEngine():logger(LogFactory::getInstance()),
|
||||
_haltRequested(false),
|
||||
_noWait(false),
|
||||
_refreshInterval(DEFAULT_REFRESH_INTERVAL),
|
||||
_cookieStorage(new CookieStorage()),
|
||||
_btRegistry(new BtRegistry()),
|
||||
_dnsCache(new SimpleDNSCache())
|
||||
|
@ -490,7 +491,8 @@ void DownloadEngine::run() {
|
|||
Time cp;
|
||||
cp.setTimeInSec(0);
|
||||
while(!commands.empty() || !_routineCommands.empty()) {
|
||||
if(cp.elapsed(1)) {
|
||||
if(cp.elapsed(_refreshInterval)) {
|
||||
_refreshInterval = DEFAULT_REFRESH_INTERVAL;
|
||||
cp.reset();
|
||||
executeCommand(commands, Command::STATUS_ALL);
|
||||
} else {
|
||||
|
@ -1124,4 +1126,9 @@ SharedHandle<AuthConfigFactory> DownloadEngine::getAuthConfigFactory() const
|
|||
return _authConfigFactory;
|
||||
}
|
||||
|
||||
void DownloadEngine::setRefreshInterval(time_t interval)
|
||||
{
|
||||
_refreshInterval = interval;
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -296,6 +296,10 @@ private:
|
|||
|
||||
bool _noWait;
|
||||
|
||||
static const time_t DEFAULT_REFRESH_INTERVAL = 1;
|
||||
|
||||
time_t _refreshInterval;
|
||||
|
||||
std::deque<Command*> _routineCommands;
|
||||
|
||||
SharedHandle<CookieStorage> _cookieStorage;
|
||||
|
@ -444,6 +448,8 @@ public:
|
|||
void setAuthConfigFactory(const SharedHandle<AuthConfigFactory>& factory);
|
||||
|
||||
SharedHandle<AuthConfigFactory> getAuthConfigFactory() const;
|
||||
|
||||
void setRefreshInterval(time_t interval);
|
||||
};
|
||||
|
||||
typedef SharedHandle<DownloadEngine> DownloadEngineHandle;
|
||||
|
|
|
@ -39,8 +39,11 @@
|
|||
|
||||
namespace aria2 {
|
||||
|
||||
SleepCommand::SleepCommand(int32_t cuid, DownloadEngine* e, Command* nextCommand, time_t wait):
|
||||
Command(cuid), engine(e), nextCommand(nextCommand), wait(wait) {}
|
||||
SleepCommand::SleepCommand(int32_t cuid, DownloadEngine* e,
|
||||
RequestGroup* requestGroup,
|
||||
Command* nextCommand, time_t wait):
|
||||
Command(cuid), engine(e), _requestGroup(requestGroup),
|
||||
nextCommand(nextCommand), wait(wait) {}
|
||||
|
||||
SleepCommand::~SleepCommand() {
|
||||
if(nextCommand) {
|
||||
|
@ -49,7 +52,9 @@ SleepCommand::~SleepCommand() {
|
|||
}
|
||||
|
||||
bool SleepCommand::execute() {
|
||||
if(checkPoint.elapsed(wait) || isHaltRequested()) {
|
||||
if(_requestGroup->downloadFinished() || _requestGroup->isHaltRequested()) {
|
||||
return true;
|
||||
} else if(checkPoint.elapsed(wait)) {
|
||||
engine->commands.push_back(nextCommand);
|
||||
nextCommand = 0;
|
||||
return true;
|
||||
|
@ -59,18 +64,4 @@ bool SleepCommand::execute() {
|
|||
}
|
||||
}
|
||||
|
||||
bool SleepCommand::isHaltRequested() const
|
||||
{
|
||||
if(engine->isHaltRequested()) {
|
||||
return true;
|
||||
}
|
||||
RequestGroupAware* requestGroupAware = dynamic_cast<RequestGroupAware*>(nextCommand);
|
||||
if(requestGroupAware) {
|
||||
if(requestGroupAware->getRequestGroup()->isHaltRequested()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -41,18 +41,18 @@
|
|||
namespace aria2 {
|
||||
|
||||
class DownloadEngine;
|
||||
class RequestGroup;
|
||||
|
||||
class SleepCommand:public Command {
|
||||
private:
|
||||
DownloadEngine* engine;
|
||||
RequestGroup* _requestGroup;
|
||||
Command* nextCommand;
|
||||
time_t wait;
|
||||
Time checkPoint;
|
||||
|
||||
bool isHaltRequested() const;
|
||||
|
||||
public:
|
||||
SleepCommand(int32_t cuid, DownloadEngine* e, Command* nextCommand, time_t wait);
|
||||
SleepCommand(int32_t cuid, DownloadEngine* e, RequestGroup* requestGroup,
|
||||
Command* nextCommand, time_t wait);
|
||||
virtual ~SleepCommand();
|
||||
bool execute();
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue