diff options
Diffstat (limited to 'cpp/src/IceUtil/Timer.cpp')
-rw-r--r-- | cpp/src/IceUtil/Timer.cpp | 21 |
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) |