mirror of https://github.com/aria2/aria2
2009-10-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Throw exception if binding listening port is failed. Removed RequestGroupMan::getInitialCommand(). Use fillRequestGroupFromReserver() instead. Delete commands for RequestGroup which has errors when it is being added. * src/BtSetup.cc * src/DownloadEngine.cc * src/DownloadEngine.h * src/DownloadEngineFactory.cc * src/MultiUrlRequestInfo.cc * src/RequestGroupMan.cc * src/RequestGroupMan.h * test/RequestGroupManTest.ccpull/1/head
parent
a71b642db1
commit
07dc5bdfee
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
|||
2009-10-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Throw exception if binding listening port is failed. Removed
|
||||
RequestGroupMan::getInitialCommand(). Use
|
||||
fillRequestGroupFromReserver() instead. Delete commands for
|
||||
RequestGroup which has errors when it is being added.
|
||||
* src/BtSetup.cc
|
||||
* src/DownloadEngine.cc
|
||||
* src/DownloadEngine.h
|
||||
* src/DownloadEngineFactory.cc
|
||||
* src/MultiUrlRequestInfo.cc
|
||||
* src/RequestGroupMan.cc
|
||||
* src/RequestGroupMan.h
|
||||
* test/RequestGroupManTest.cc
|
||||
|
||||
2009-10-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Fixed the bug that when downloading more than one torrent,
|
||||
|
|
|
@ -153,10 +153,11 @@ void BtSetup::setup(std::deque<Command*>& commands,
|
|||
uint16_t port;
|
||||
if(listenCommand->bindPort(port, seq)) {
|
||||
btRuntime->setListenPort(port);
|
||||
commands.push_back(listenCommand);
|
||||
// Add command to DownloadEngine directly.
|
||||
e->commands.push_back(listenCommand);
|
||||
} else {
|
||||
_logger->error(_("Errors occurred while binding port.\n"));
|
||||
delete listenCommand;
|
||||
throw DL_ABORT_EX(_("Errors occurred while binding port.\n"));
|
||||
}
|
||||
} else {
|
||||
PeerListenCommand* listenCommand = PeerListenCommand::getInstance(e);
|
||||
|
|
|
@ -229,13 +229,6 @@ void DownloadEngine::requestHalt()
|
|||
_requestGroupMan->halt();
|
||||
}
|
||||
|
||||
void DownloadEngine::fillCommand()
|
||||
{
|
||||
std::deque<Command*> commands;
|
||||
_requestGroupMan->getInitialCommands(commands, this);
|
||||
addCommand(commands);
|
||||
}
|
||||
|
||||
void DownloadEngine::setStatCalc(const StatCalcHandle& statCalc)
|
||||
{
|
||||
_statCalc = statCalc;
|
||||
|
|
|
@ -184,8 +184,6 @@ public:
|
|||
|
||||
void addCommand(const std::deque<Command*>& commands);
|
||||
|
||||
void fillCommand();
|
||||
|
||||
void setStatCalc(const SharedHandle<StatCalc>& statCalc);
|
||||
|
||||
bool isHaltRequested() const
|
||||
|
|
|
@ -74,24 +74,11 @@ DownloadEngineFactory::DownloadEngineFactory():
|
|||
_logger(LogFactory::getInstance()) {}
|
||||
|
||||
DownloadEngineHandle
|
||||
DownloadEngineFactory::newDownloadEngine(Option* op,
|
||||
const RequestGroups& requestGroups)
|
||||
DownloadEngineFactory::newDownloadEngine
|
||||
(Option* op, const RequestGroups& requestGroups)
|
||||
{
|
||||
RequestGroups workingSet;
|
||||
RequestGroups reservedSet;
|
||||
const size_t MAX_CONCURRENT_DOWNLOADS = op->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS);
|
||||
if(MAX_CONCURRENT_DOWNLOADS < requestGroups.size()) {
|
||||
workingSet.insert(workingSet.end(),
|
||||
requestGroups.begin(),
|
||||
requestGroups.begin()+MAX_CONCURRENT_DOWNLOADS);
|
||||
|
||||
reservedSet.insert(reservedSet.end(),
|
||||
requestGroups.begin()+MAX_CONCURRENT_DOWNLOADS,
|
||||
requestGroups.end());
|
||||
} else {
|
||||
workingSet = requestGroups;
|
||||
}
|
||||
|
||||
const size_t MAX_CONCURRENT_DOWNLOADS =
|
||||
op->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS);
|
||||
SharedHandle<EventPoll> eventPoll;
|
||||
#ifdef HAVE_EPOLL
|
||||
if(op->get(PREF_EVENT_POLL) == V_EPOLL) {
|
||||
|
@ -100,7 +87,7 @@ DownloadEngineFactory::newDownloadEngine(Option* op,
|
|||
eventPoll = ep;
|
||||
} else {
|
||||
throw DL_ABORT_EX("Initializing EpollEventPoll failed."
|
||||
" Try --event-poll=select");
|
||||
" Try --event-poll=select");
|
||||
}
|
||||
} else
|
||||
#endif // HAVE_EPLL
|
||||
|
@ -113,9 +100,8 @@ DownloadEngineFactory::newDownloadEngine(Option* op,
|
|||
e->option = op;
|
||||
|
||||
RequestGroupManHandle
|
||||
requestGroupMan(new RequestGroupMan(workingSet, MAX_CONCURRENT_DOWNLOADS,
|
||||
requestGroupMan(new RequestGroupMan(requestGroups, MAX_CONCURRENT_DOWNLOADS,
|
||||
op));
|
||||
requestGroupMan->addReservedGroup(reservedSet);
|
||||
e->_requestGroupMan = requestGroupMan;
|
||||
e->_fileAllocationMan.reset(new FileAllocationMan());
|
||||
#ifdef ENABLE_MESSAGE_DIGEST
|
||||
|
|
|
@ -160,7 +160,6 @@ downloadresultcode::RESULT MultiUrlRequestInfo::execute()
|
|||
(_option->getAsInt(PREF_SERVER_STAT_TIMEOUT));
|
||||
}
|
||||
e->setStatCalc(_statCalc);
|
||||
e->fillCommand();
|
||||
|
||||
// The number of simultaneous download is specified by
|
||||
// PREF_MAX_CONCURRENT_DOWNLOADS.
|
||||
|
|
|
@ -72,7 +72,7 @@ namespace aria2 {
|
|||
RequestGroupMan::RequestGroupMan(const RequestGroups& requestGroups,
|
||||
unsigned int maxSimultaneousDownloads,
|
||||
const Option* option):
|
||||
_requestGroups(requestGroups),
|
||||
_reservedGroups(requestGroups),
|
||||
_logger(LogFactory::getInstance()),
|
||||
_maxSimultaneousDownloads(maxSimultaneousDownloads),
|
||||
_gidCounter(0),
|
||||
|
@ -445,20 +445,25 @@ void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e)
|
|||
while(count < num && !_reservedGroups.empty()) {
|
||||
RequestGroupHandle groupToAdd = _reservedGroups.front();
|
||||
_reservedGroups.pop_front();
|
||||
Commands commands;
|
||||
try {
|
||||
if(!groupToAdd->isDependencyResolved()) {
|
||||
temp.push_back(groupToAdd);
|
||||
continue;
|
||||
}
|
||||
configureRequestGroup(groupToAdd);
|
||||
Commands commands;
|
||||
createInitialCommand(groupToAdd, commands, e);
|
||||
_requestGroups.push_back(groupToAdd);
|
||||
++count;
|
||||
e->addCommand(commands);
|
||||
commands.clear();
|
||||
executeStartHook(groupToAdd, e->option);
|
||||
} catch(RecoverableException& ex) {
|
||||
_logger->error(EX_EXCEPTION_CAUGHT, ex);
|
||||
_logger->debug("Deleting temporal commands.");
|
||||
std::for_each(commands.begin(), commands.end(), Deleter());
|
||||
commands.clear();
|
||||
_logger->debug("Commands deleted");
|
||||
groupToAdd->releaseRuntimeResource(e);
|
||||
_downloadResults.push_back(groupToAdd->createDownloadResult());
|
||||
}
|
||||
|
@ -472,29 +477,6 @@ void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e)
|
|||
}
|
||||
}
|
||||
|
||||
void RequestGroupMan::getInitialCommands(std::deque<Command*>& commands,
|
||||
DownloadEngine* e)
|
||||
{
|
||||
for(RequestGroups::iterator itr = _requestGroups.begin();
|
||||
itr != _requestGroups.end();) {
|
||||
try {
|
||||
if((*itr)->isDependencyResolved()) {
|
||||
configureRequestGroup(*itr);
|
||||
createInitialCommand(*itr, commands, e);
|
||||
executeStartHook(*itr, e->option);
|
||||
++itr;
|
||||
} else {
|
||||
_reservedGroups.push_front((*itr));
|
||||
itr = _requestGroups.erase(itr);
|
||||
}
|
||||
} catch(RecoverableException& e) {
|
||||
_logger->error(EX_EXCEPTION_CAUGHT, e);
|
||||
_downloadResults.push_back((*itr)->createDownloadResult());
|
||||
itr = _requestGroups.erase(itr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RequestGroupMan::save()
|
||||
{
|
||||
for(RequestGroups::iterator itr = _requestGroups.begin();
|
||||
|
|
|
@ -97,8 +97,6 @@ public:
|
|||
|
||||
void forceHalt();
|
||||
|
||||
void getInitialCommands(std::deque<Command*>& commands, DownloadEngine* e);
|
||||
|
||||
void removeStoppedGroup(DownloadEngine* e);
|
||||
|
||||
void fillRequestGroupFromReserver(DownloadEngine* e);
|
||||
|
|
|
@ -54,11 +54,11 @@ void RequestGroupManTest::testIsSameFileBeingDownloaded()
|
|||
rg1->setDownloadContext(dctx1);
|
||||
rg2->setDownloadContext(dctx2);
|
||||
|
||||
RequestGroups rgs;
|
||||
rgs.push_back(rg1);
|
||||
rgs.push_back(rg2);
|
||||
RequestGroupMan gm(std::deque<SharedHandle<RequestGroup> >(), 1,
|
||||
_option.get());
|
||||
|
||||
RequestGroupMan gm(rgs, 1, _option.get());
|
||||
gm.addRequestGroup(rg1);
|
||||
gm.addRequestGroup(rg2);
|
||||
|
||||
CPPUNIT_ASSERT(gm.isSameFileBeingDownloaded(rg1.get()));
|
||||
|
||||
|
|
Loading…
Reference in New Issue