From f683ef370bcb987a9f96fc5da0793d71e3721d29 Mon Sep 17 00:00:00 2001 From: Marc Laukien Date: Sun, 22 Sep 2002 15:44:10 +0000 Subject: thread fixes --- cpp/src/IceUtil/ThreadException.cpp | 100 ++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 cpp/src/IceUtil/ThreadException.cpp (limited to 'cpp/src/IceUtil/ThreadException.cpp') diff --git a/cpp/src/IceUtil/ThreadException.cpp b/cpp/src/IceUtil/ThreadException.cpp new file mode 100644 index 00000000000..f0e9acea3b9 --- /dev/null +++ b/cpp/src/IceUtil/ThreadException.cpp @@ -0,0 +1,100 @@ +// ********************************************************************** +// +// Copyright (c) 2001 +// Mutable Realms, Inc. +// Huntsville, AL, USA +// +// All Rights Reserved +// +// ********************************************************************** + +#include + +using namespace std; + +IceUtil::ThreadSyscallException::ThreadSyscallException(const char* file, int line) : + Exception(file, line), +#ifdef _WIN32 + _error(GetLastError()) +#else + _error(errno) +#endif +{ +} + +string +IceUtil::ThreadSyscallException::ice_name() const +{ + return "IceUtil::ThreadSyscallException"; +} + +void +IceUtil::ThreadSyscallException::ice_print(ostream& os) const +{ + Exception::ice_print(os); + if(_error != 0) + { + os << ":\nthread syscall exception: "; +#ifdef _WIN32 + LPVOID lpMsgBuf = 0; + DWORD ok = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + _error, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR)&lpMsgBuf, + 0, + NULL); + + if(ok) + { + LPCTSTR msg = (LPCTSTR)lpMsgBuf; + assert(msg && strlen(msg) > 0); + os << msg; + LocalFree(lpMsgBuf); + } + else + { + os << "unknown thread error"; + } +#else + os << strerror(_error); +#endif + } +} + +IceUtil::Exception* +IceUtil::ThreadSyscallException::ice_clone() const +{ + return new ThreadSyscallException(*this); +} + +void +IceUtil::ThreadSyscallException::ice_throw() const +{ + throw *this; +} + +IceUtil::ThreadLockedException::ThreadLockedException(const char* file, int line) : + Exception(file, line) +{ +} + +string +IceUtil::ThreadLockedException::ice_name() const +{ + return "IceUtil::ThreadLockedException"; +} + +IceUtil::Exception* +IceUtil::ThreadLockedException::ice_clone() const +{ + return new ThreadLockedException(*this); +} + +void +IceUtil::ThreadLockedException::ice_throw() const +{ + throw *this; +} -- cgit v1.2.3