Переглянути джерело

2010-07-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	After change request to faster one, wait at least 10 seconds.
	* src/FileEntry.cc
	* src/FileEntry.h
Tatsuhiro Tsujikawa 15 роки тому
батько
коміт
f98a180323
3 змінених файлів з 13 додано та 2 видалено
  1. 6 0
      ChangeLog
  2. 5 2
      src/FileEntry.cc
  3. 2 0
      src/FileEntry.h

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+2010-07-11  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	After change request to faster one, wait at least 10 seconds.
+	* src/FileEntry.cc
+	* src/FileEntry.h
+
 2010-07-11  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Fixed ChunkedDecoder. It does not read trailer and final CRLF.

+ 5 - 2
src/FileEntry.cc

@@ -52,6 +52,7 @@ FileEntry::FileEntry(const std::string& path,
   offset_(offset),
   requested_(true),
   singleHostMultiConnection_(true),
+  lastFasterReplace_(0),
   logger_(LogFactory::getInstance()) {}
 
 FileEntry::FileEntry():
@@ -163,7 +164,9 @@ FileEntry::getRequest
 SharedHandle<Request>
 FileEntry::findFasterRequest(const SharedHandle<Request>& base)
 {
-  if(requestPool_.empty()) {
+  const int startupIdleTime = 10;
+  if(requestPool_.empty() ||
+     lastFasterReplace_.difference(global::wallclock) < startupIdleTime) {
     return SharedHandle<Request>();
   }
   const SharedHandle<PeerStat>& fastest = requestPool_.front()->getPeerStat();
@@ -172,7 +175,6 @@ FileEntry::findFasterRequest(const SharedHandle<Request>& base)
   }
   const SharedHandle<PeerStat>& basestat = base->getPeerStat();
   // TODO hard coded value. See PREF_STARTUP_IDLE_TIME
-  const int startupIdleTime = 10;
   if(basestat.isNull() ||
      (basestat->getDownloadStartTime().
       difference(global::wallclock) >= startupIdleTime &&
@@ -181,6 +183,7 @@ FileEntry::findFasterRequest(const SharedHandle<Request>& base)
     SharedHandle<Request> fastestRequest = requestPool_.front();
     requestPool_.pop_front();
     inFlightRequests_.push_back(fastestRequest);
+    lastFasterReplace_.reset();
     return fastestRequest;
   }
   return SharedHandle<Request>();

+ 2 - 0
src/FileEntry.h

@@ -48,6 +48,7 @@
 #include "URIResult.h"
 #include "DownloadResultCode.h"
 #include "A2STR.h"
+#include "TimerA2.h"
 
 namespace aria2 {
 
@@ -71,6 +72,7 @@ private:
   std::deque<URIResult> uriResults_;
   bool singleHostMultiConnection_;
   std::string originalName_;
+  Timer lastFasterReplace_;
   Logger* logger_;
 
   void storePool(const SharedHandle<Request>& request);