From 5d20f8d730c593c75be0bd0057c74deb6672c0f3 Mon Sep 17 00:00:00 2001 From: Jose Date: Tue, 10 Feb 2015 16:12:42 +0100 Subject: Fixed (ICE-5975) - Improve IceUtil::ThreadControl::sleep and wait primitives to better handle negative values --- cpp/src/IceUtil/Thread.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'cpp/src/IceUtil/Thread.cpp') 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(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; -- cgit v1.2.3