diff options
author | Benoit Foucher <benoit@zeroc.com> | 2011-04-06 09:40:55 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2011-04-06 09:40:55 +0200 |
commit | 8e4d4c244e2560ed0d9957a36f8eade79e455c0d (patch) | |
tree | e0509c2864d2152831f6309d70afa8426fb3f6a3 /cpp/src/IceUtil/Timer.cpp | |
parent | Fix for bug 4799: minimize escapes in config files generated by IceGrid (diff) | |
download | ice-8e4d4c244e2560ed0d9957a36f8eade79e455c0d.tar.bz2 ice-8e4d4c244e2560ed0d9957a36f8eade79e455c0d.tar.xz ice-8e4d4c244e2560ed0d9957a36f8eade79e455c0d.zip |
Fixed bug 3683 - Added check for overflows when delay is too large
Diffstat (limited to 'cpp/src/IceUtil/Timer.cpp')
-rw-r--r-- | cpp/src/IceUtil/Timer.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/cpp/src/IceUtil/Timer.cpp b/cpp/src/IceUtil/Timer.cpp index 1645b86df9f..31a6884b75a 100644 --- a/cpp/src/IceUtil/Timer.cpp +++ b/cpp/src/IceUtil/Timer.cpp @@ -65,7 +65,13 @@ Timer::schedule(const TimerTaskPtr& task, const IceUtil::Time& delay) throw IllegalArgumentException(__FILE__, __LINE__, "timer destroyed"); } - IceUtil::Time time = IceUtil::Time::now(IceUtil::Time::Monotonic) + delay; + IceUtil::Time now = IceUtil::Time::now(IceUtil::Time::Monotonic); + IceUtil::Time time = now + delay; + if(delay > IceUtil::Time() && time < now) + { + throw IllegalArgumentException(__FILE__, __LINE__, "invalid delay"); + } + bool inserted = _tasks.insert(make_pair(task, time)).second; if(!inserted) { @@ -88,7 +94,13 @@ Timer::scheduleRepeated(const TimerTaskPtr& task, const IceUtil::Time& delay) throw IllegalArgumentException(__FILE__, __LINE__, "timer destroyed"); } - const Token token(IceUtil::Time::now(IceUtil::Time::Monotonic) + delay, delay, task); + IceUtil::Time now = IceUtil::Time::now(IceUtil::Time::Monotonic); + const Token token(now + delay, delay, task); + if(delay > IceUtil::Time() && token.scheduledTime < now) + { + throw IllegalArgumentException(__FILE__, __LINE__, "invalid delay"); + } + bool inserted = _tasks.insert(make_pair(task, token.scheduledTime)).second; if(!inserted) { |