summaryrefslogtreecommitdiff
path: root/src/DownloadEngine.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-02-25 22:58:51 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-02-25 22:58:51 +0900
commit59f251ba14edbe984453004efe0788dca62d8dd3 (patch)
tree9bfaba46cbe2bc1a81be1d5ef5ad4b9371cf9831 /src/DownloadEngine.cc
parentf8f651e8db8e3814297d85d0a86a1aca47d9f010 (diff)
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.
Diffstat (limited to 'src/DownloadEngine.cc')
-rw-r--r--src/DownloadEngine.cc9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/DownloadEngine.cc b/src/DownloadEngine.cc
index 95b510f0..298089e9 100644
--- a/src/DownloadEngine.cc
+++ b/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);