summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Thread.cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2015-02-10 16:12:42 +0100
committerJose <jose@zeroc.com>2015-02-10 16:12:42 +0100
commit5d20f8d730c593c75be0bd0057c74deb6672c0f3 (patch)
tree9589e9f87c94c7a597a5dfc3d6e3cd77e190882c /cpp/src/IceUtil/Thread.cpp
parentRemoved IceDiscovery from android, UDP multicast isn't supported (diff)
downloadice-5d20f8d730c593c75be0bd0057c74deb6672c0f3.tar.bz2
ice-5d20f8d730c593c75be0bd0057c74deb6672c0f3.tar.xz
ice-5d20f8d730c593c75be0bd0057c74deb6672c0f3.zip
Fixed (ICE-5975) - Improve IceUtil::ThreadControl::sleep and wait primitives to better handle negative values
Diffstat (limited to 'cpp/src/IceUtil/Thread.cpp')
-rw-r--r--cpp/src/IceUtil/Thread.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/cpp/src/IceUtil/Thread.cpp b/cpp/src/IceUtil/Thread.cpp
index e428d877162..89b49ec71c7 100644
--- a/cpp/src/IceUtil/Thread.cpp
+++ b/cpp/src/IceUtil/Thread.cpp
@@ -103,6 +103,11 @@ IceUtil::ThreadControl::id() const
void
IceUtil::ThreadControl::sleep(const Time& timeout)
{
+ IceUtil::Int64 msTimeout = timeout.toMilliSeconds();
+ if(msTimeout < 0 || msTimeout > 0x7FFFFFFF)
+ {
+ throw IceUtil::InvalidTimeoutException(__FILE__, __LINE__, timeout);
+ }
this_thread::sleep_for(chrono::microseconds(timeout.toMicroSeconds()));
}
@@ -330,6 +335,11 @@ IceUtil::ThreadControl::id() const
void
IceUtil::ThreadControl::sleep(const Time& timeout)
{
+ IceUtil::Int64 msTimeout = timeout.toMilliSeconds();
+ if(msTimeout < 0 || msTimeout > 0x7FFFFFFF)
+ {
+ throw IceUtil::InvalidTimeoutException(__FILE__, __LINE__, timeout);
+ }
Sleep(static_cast<long>(timeout.toMilliSeconds()));
}
@@ -590,6 +600,11 @@ IceUtil::ThreadControl::id() const
void
IceUtil::ThreadControl::sleep(const Time& timeout)
{
+ IceUtil::Int64 msTimeout = timeout.toMilliSeconds();
+ if(msTimeout < 0 || msTimeout > 0x7FFFFFFF)
+ {
+ throw IceUtil::InvalidTimeoutException(__FILE__, __LINE__, timeout);
+ }
struct timeval tv = timeout;
struct timespec ts;
ts.tv_sec = tv.tv_sec;