summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceUtil/Thread.cpp')
-rw-r--r--cpp/src/IceUtil/Thread.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/cpp/src/IceUtil/Thread.cpp b/cpp/src/IceUtil/Thread.cpp
index d0f6407e12e..bb99ee54841 100644
--- a/cpp/src/IceUtil/Thread.cpp
+++ b/cpp/src/IceUtil/Thread.cpp
@@ -30,7 +30,7 @@ IceUtil::ThreadControl::ThreadControl()
int rc = DuplicateHandle(proc, current, proc, &_handle->handle, SYNCHRONIZE, TRUE, 0);
if(rc == 0)
{
- throw ThreadSyscallException(__FILE__, __LINE__);
+ throw ThreadSyscallException(__FILE__, __LINE__, GetLastError());
}
}
@@ -114,7 +114,7 @@ IceUtil::ThreadControl::join()
int rc = WaitForSingleObject(handle->handle, INFINITE);
if(rc != WAIT_OBJECT_0)
{
- throw ThreadSyscallException(__FILE__, __LINE__);
+ throw ThreadSyscallException(__FILE__, __LINE__, GetLastError());
}
}
@@ -236,7 +236,7 @@ IceUtil::Thread::start()
if(_handle->handle == 0)
{
__decRef();
- throw ThreadSyscallException(__FILE__, __LINE__);
+ throw ThreadSyscallException(__FILE__, __LINE__, GetLastError());
}
_started = true;
@@ -384,7 +384,7 @@ IceUtil::ThreadControl::join()
int rc = pthread_join(id, &ignore);
if(rc != 0)
{
- throw ThreadSyscallException(__FILE__, __LINE__);
+ throw ThreadSyscallException(__FILE__, __LINE__, rc);
}
}
@@ -399,7 +399,7 @@ IceUtil::ThreadControl::detach()
int rc = pthread_detach(id);
if(rc != 0)
{
- throw ThreadSyscallException(__FILE__, __LINE__);
+ throw ThreadSyscallException(__FILE__, __LINE__, rc);
}
}
@@ -475,6 +475,10 @@ startHook(void* arg)
cerr << "IceUtil::Thread::run(): uncaught exception: ";
cerr << e << endl;
}
+ catch(...)
+ {
+ cerr << "IceUtil::Thread::run(): uncaught exception" << endl;
+ }
return 0;
}
}
@@ -503,7 +507,7 @@ IceUtil::Thread::start()
if(rc != 0)
{
__decRef();
- throw ThreadSyscallException(__FILE__, __LINE__);
+ throw ThreadSyscallException(__FILE__, __LINE__, rc);
}
_started = true;