diff options
author | Stephen D. Huston <shuston@apache.org> | 2010-04-28 22:25:46 +0000 |
---|---|---|
committer | Stephen D. Huston <shuston@apache.org> | 2010-04-28 22:25:46 +0000 |
commit | 3d785d35f8ece5a0d80429665d65cf1844f75bf2 (patch) | |
tree | cd91f15bbd61819385901145693fb3dc463b7e17 /qpid/cpp | |
parent | 48a2d234185223f79c01ae2f3817743ed90cc25b (diff) | |
download | qpid-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.cpp | 24 |
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); } } } |