summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Timer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceUtil/Timer.cpp')
-rw-r--r--cpp/src/IceUtil/Timer.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/cpp/src/IceUtil/Timer.cpp b/cpp/src/IceUtil/Timer.cpp
index 31a6884b75a..8d03e91d8ea 100644
--- a/cpp/src/IceUtil/Timer.cpp
+++ b/cpp/src/IceUtil/Timer.cpp
@@ -190,7 +190,26 @@ Timer::run()
}
_wakeUpTime = first.scheduledTime;
- _monitor.timedWait(first.scheduledTime - now);
+ try
+ {
+ _monitor.timedWait(first.scheduledTime - now);
+ }
+ catch(const IceUtil::InvalidTimeoutException&)
+ {
+ IceUtil::Time timeout = (first.scheduledTime - now) / 2;
+ while(timeout > IceUtil::Time())
+ {
+ try
+ {
+ _monitor.timedWait(timeout);
+ break;
+ }
+ catch(const IceUtil::InvalidTimeoutException&)
+ {
+ timeout = timeout / 2;
+ }
+ }
+ }
}
if(_destroyed)