summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorStephen D. Huston <shuston@apache.org>2010-04-28 22:25:46 +0000
committerStephen D. Huston <shuston@apache.org>2010-04-28 22:25:46 +0000
commit3d785d35f8ece5a0d80429665d65cf1844f75bf2 (patch)
treecd91f15bbd61819385901145693fb3dc463b7e17 /qpid/cpp
parent48a2d234185223f79c01ae2f3817743ed90cc25b (diff)
downloadqpid-python-3d785d35f8ece5a0d80429665d65cf1844f75bf2.tar.gz
Don't try to get the top() of an empty queue and use it. Resolves (I believe) QPID-2186.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@939117 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r--qpid/cpp/src/qpid/sys/Timer.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/qpid/cpp/src/qpid/sys/Timer.cpp b/qpid/cpp/src/qpid/sys/Timer.cpp
index ffd1921b46..55c48c5b9c 100644
--- a/qpid/cpp/src/qpid/sys/Timer.cpp
+++ b/qpid/cpp/src/qpid/sys/Timer.cpp
@@ -116,21 +116,28 @@ void Timer::run()
} else if(Duration(t->nextFireTime, start) >= 0) {
Monitor::ScopedUnlock u(monitor);
fire(t);
- // Warn on callback overrun
+ // Warn if callback overran next timer's start.
AbsTime end(AbsTime::now());
- Duration overrun(tasks.top()->nextFireTime, end);
+ Duration overrun (0);
+ if (!tasks.empty()) {
+ overrun = Duration(tasks.top()->nextFireTime, end);
+ }
if (delay > late) {
if (overrun > overran) {
QPID_LOG(warning,
- "Timer woken up " << delay / TIME_MSEC << "ms late, "
- "overrunning by " << overrun / TIME_MSEC << "ms [taking "
- << Duration(start, end) << "]");
+ "Timer woken up " << delay / TIME_MSEC <<
+ "ms late, overrunning by " <<
+ overrun / TIME_MSEC << "ms [taking " <<
+ Duration(start, end) << "]");
} else {
- QPID_LOG(warning, "Timer woken up " << delay / TIME_MSEC << "ms late");
+ QPID_LOG(warning,
+ "Timer woken up " << delay / TIME_MSEC <<
+ "ms late");
}
} else if (overrun > overran) {
QPID_LOG(warning,
- "Timer callback overran by " << overrun / TIME_MSEC <<
+ "Timer callback overran by " <<
+ overrun / TIME_MSEC <<
"ms [taking " << Duration(start, end) << "]");
}
continue;
@@ -142,7 +149,8 @@ void Timer::run()
tasks.push(t);
}
}
- monitor.wait(tasks.top()->sortTime);
+ if (!tasks.empty())
+ monitor.wait(tasks.top()->sortTime);
}
}
}