diff options
author | Marc Laukien <marc@zeroc.com> | 2002-09-22 15:44:10 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2002-09-22 15:44:10 +0000 |
commit | f683ef370bcb987a9f96fc5da0793d71e3721d29 (patch) | |
tree | d0ef420f3cab12b8bab3563dbd71618adba704a3 /cpp/src/IceUtil/ThreadException.cpp | |
parent | minor (diff) | |
download | ice-f683ef370bcb987a9f96fc5da0793d71e3721d29.tar.bz2 ice-f683ef370bcb987a9f96fc5da0793d71e3721d29.tar.xz ice-f683ef370bcb987a9f96fc5da0793d71e3721d29.zip |
thread fixes
Diffstat (limited to 'cpp/src/IceUtil/ThreadException.cpp')
-rw-r--r-- | cpp/src/IceUtil/ThreadException.cpp | 100 |
1 files changed, 100 insertions, 0 deletions
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 <IceUtil/ThreadException.h>
+
+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;
+}
|