diff options
author | ZeroC Staff <git@zeroc.com> | 2007-12-18 12:43:45 -0500 |
---|---|---|
committer | ZeroC Staff <git@zeroc.com> | 2007-12-18 12:43:45 -0500 |
commit | 41b6ef772bdf2fa6724cfbf2d71acdb866140eac (patch) | |
tree | 33284f1fee522dac6f463034ae52d56ac97114db /cpp/src | |
parent | changing version of Berkeley DB (diff) | |
download | ice-41b6ef772bdf2fa6724cfbf2d71acdb866140eac.tar.bz2 ice-41b6ef772bdf2fa6724cfbf2d71acdb866140eac.tar.xz ice-41b6ef772bdf2fa6724cfbf2d71acdb866140eac.zip |
Fixed bug #2277
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/IceUtil/Cond.cpp | 9 | ||||
-rw-r--r-- | cpp/src/IceUtil/ThreadException.cpp | 34 |
2 files changed, 41 insertions, 2 deletions
diff --git a/cpp/src/IceUtil/Cond.cpp b/cpp/src/IceUtil/Cond.cpp index f1c24099eb8..d1c00138839 100644 --- a/cpp/src/IceUtil/Cond.cpp +++ b/cpp/src/IceUtil/Cond.cpp @@ -42,7 +42,13 @@ IceUtil::Semaphore::wait() const bool IceUtil::Semaphore::timedWait(const Time& timeout) const { - int rc = WaitForSingleObject(_sem, static_cast<long>(timeout.toMilliSeconds())); + Int64 msTimeout = timeout.toMilliSeconds(); + if(msTimeout < 0 || msTimeout > 0x7FFFFFFF) + { + throw InvalidTimeoutException(__FILE__, __LINE__, timeout); + } + + int rc = WaitForSingleObject(_sem, static_cast<DWORD>(msTimeout)); if(rc != WAIT_TIMEOUT && rc != WAIT_OBJECT_0) { throw ThreadSyscallException(__FILE__, __LINE__, GetLastError()); @@ -50,7 +56,6 @@ IceUtil::Semaphore::timedWait(const Time& timeout) const return rc != WAIT_TIMEOUT; } - void IceUtil::Semaphore::post(int count) const { diff --git a/cpp/src/IceUtil/ThreadException.cpp b/cpp/src/IceUtil/ThreadException.cpp index 4f474723feb..7a17a98185e 100644 --- a/cpp/src/IceUtil/ThreadException.cpp +++ b/cpp/src/IceUtil/ThreadException.cpp @@ -180,3 +180,37 @@ IceUtil::BadThreadControlException::ice_throw() const { throw *this; } + +IceUtil::InvalidTimeoutException::InvalidTimeoutException(const char* file, int line, + const IceUtil::Time& timeout) : + Exception(file, line), + _timeout(timeout) +{ +} + +const char* IceUtil::InvalidTimeoutException::_name = "IceUtil::InvalidTimeoutException"; + +string +IceUtil::InvalidTimeoutException::ice_name() const +{ + return _name; +} + +void +IceUtil::InvalidTimeoutException::ice_print(ostream& os) const +{ + Exception::ice_print(os); + os << ":\ninvalid timeout: " << _timeout << " seconds"; +} + +IceUtil::Exception* +IceUtil::InvalidTimeoutException::ice_clone() const +{ + return new InvalidTimeoutException(*this); +} + +void +IceUtil::InvalidTimeoutException::ice_throw() const +{ + throw *this; +} |