2007-11-05 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Now SleepCommand dispatches nextCommand when halt is requested.
	It avoids a possible long wait after hitting CTRL-C.
	* src/SleepCommand.{h, cc}
	* src/RequestGroupAware.{h, cc}
pull/1/head
Tatsuhiro Tsujikawa 2007-11-05 11:42:43 +00:00
parent d8ae699182
commit bcbadb3b6b
5 changed files with 35 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2007-11-05 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Now SleepCommand dispatches nextCommand when halt is requested.
It avoids a possible long wait after hitting CTRL-C.
* src/SleepCommand.{h, cc}
* src/RequestGroupAware.{h, cc}
2007-11-04 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com> 2007-11-04 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed: the listen port sent to the tracker is wrong. If aria2 fails Fixed: the listen port sent to the tracker is wrong. If aria2 fails

View File

@ -45,3 +45,8 @@ RequestGroupAware::~RequestGroupAware()
{ {
_requestGroup->decreaseNumCommand(); _requestGroup->decreaseNumCommand();
} }
RequestGroup* RequestGroupAware::getRequestGroup() const
{
return _requestGroup;
}

View File

@ -46,6 +46,8 @@ public:
RequestGroupAware(RequestGroup* requestGroup); RequestGroupAware(RequestGroup* requestGroup);
~RequestGroupAware(); ~RequestGroupAware();
RequestGroup* getRequestGroup() const;
}; };
#endif // _D_REQUEST_GROUP_AWARE_H_ #endif // _D_REQUEST_GROUP_AWARE_H_

View File

@ -34,20 +34,22 @@
/* copyright --> */ /* copyright --> */
#include "SleepCommand.h" #include "SleepCommand.h"
#include "Util.h" #include "Util.h"
#include "RequestGroupAware.h"
#include "RequestGroup.h"
SleepCommand::SleepCommand(int32_t cuid, DownloadEngine* e, Command* nextCommand, int32_t wait): SleepCommand::SleepCommand(int32_t cuid, DownloadEngine* e, Command* nextCommand, int32_t wait):
Command(cuid), engine(e), nextCommand(nextCommand), wait(wait) {} Command(cuid), engine(e), nextCommand(nextCommand), wait(wait) {}
SleepCommand::~SleepCommand() { SleepCommand::~SleepCommand() {
if(nextCommand != NULL) { if(nextCommand) {
delete(nextCommand); delete(nextCommand);
} }
} }
bool SleepCommand::execute() { bool SleepCommand::execute() {
if(checkPoint.elapsed(wait)) { if(checkPoint.elapsed(wait) || isHaltRequested()) {
engine->commands.push_back(nextCommand); engine->commands.push_back(nextCommand);
nextCommand = NULL; nextCommand = 0;
return true; return true;
} else { } else {
engine->commands.push_back(this); engine->commands.push_back(this);
@ -55,3 +57,16 @@ 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;
}

View File

@ -45,6 +45,9 @@ private:
Command* nextCommand; Command* nextCommand;
int32_t wait; int32_t wait;
Time checkPoint; Time checkPoint;
bool isHaltRequested() const;
public: public:
SleepCommand(int32_t cuid, DownloadEngine* e, Command* nextCommand, int32_t wait); SleepCommand(int32_t cuid, DownloadEngine* e, Command* nextCommand, int32_t wait);
virtual ~SleepCommand(); virtual ~SleepCommand();