Explorar o código

Fixed rounding error in DownloadEngine::run().

This fixes the bug that executeCommand() with Command::STATUS_ALL is
not called in every interval correctly because of rounding error in
timer.
Tatsuhiro Tsujikawa %!s(int64=14) %!d(string=hai) anos
pai
achega
59f251ba14
Modificáronse 1 ficheiros con 8 adicións e 1 borrados
  1. 8 1
      src/DownloadEngine.cc

+ 8 - 1
src/DownloadEngine.cc

@@ -141,6 +141,13 @@ void executeCommand(std::deque<Command*>& commands,
 }
 } // namespace
 
+namespace {
+
+// Rounding error in millis
+const int A2_DELTA = 10;
+
+} // namespace
+
 void DownloadEngine::run()
 {
   Timer cp;
@@ -148,7 +155,7 @@ void DownloadEngine::run()
   while(!commands_.empty() || !routineCommands_.empty()) {
     global::wallclock.reset();
     calculateStatistics();
-    if(cp.differenceInMillis(global::wallclock) >= refreshInterval_) {
+    if(cp.differenceInMillis(global::wallclock) >= refreshInterval_-A2_DELTA) {
       refreshInterval_ = DEFAULT_REFRESH_INTERVAL;
       cp = global::wallclock;
       executeCommand(commands_, Command::STATUS_ALL);