From 21887ddb7cc8071fd6ad8f8cb5d5443beec0356b Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 18 Jul 2010 15:14:50 +0000 Subject: [PATCH] 2010-07-19 Tatsuhiro Tsujikawa Metadata download may take very long time. If URIs are available, give up metadata download in at most 30 seconds. * src/Metalink2RequestGroup.cc --- ChangeLog | 6 ++++++ src/Metalink2RequestGroup.cc | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/ChangeLog b/ChangeLog index 49c5ebd7..4b6a3305 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-07-19 Tatsuhiro Tsujikawa + + Metadata download may take very long time. If URIs are + available, give up metadata download in at most 30 seconds. + * src/Metalink2RequestGroup.cc + 2010-07-19 Tatsuhiro Tsujikawa Call RequestGroup::setForceHaltRequested(true) from diff --git a/src/Metalink2RequestGroup.cc b/src/Metalink2RequestGroup.cc index f041dee0..27894429 100644 --- a/src/Metalink2RequestGroup.cc +++ b/src/Metalink2RequestGroup.cc @@ -315,6 +315,25 @@ Metalink2RequestGroup::createRequestGroup SharedHandle dep(new BtDependency(rg, torrentRg)); rg->dependsOn(dep); torrentRg->belongsTo(rg->getGID()); + // metadata download may take very long time. If URIs are + // available, give up metadata download in at most 30 seconds. + const time_t btStopTimeout = 30; + time_t currentBtStopTimeout = + torrentRg->getOption()->getAsInt(PREF_BT_STOP_TIMEOUT); + if(currentBtStopTimeout == 0 || currentBtStopTimeout > btStopTimeout) { + std::vector >::const_iterator i; + std::vector >::const_iterator eoi + = dctx->getFileEntries().end(); + for(i = dctx->getFileEntries().begin(); i != eoi; ++i) { + if((*i)->getRemainingUris().empty()) { + break; + } + } + if(i == dctx->getFileEntries().end()) { + torrentRg->getOption()->put + (PREF_BT_STOP_TIMEOUT, util::itos(btStopTimeout)); + } + } } #endif // ENABLE_BITTORRENT groups.push_back(rg);