summaryrefslogtreecommitdiff
path: root/src/threadengines/threadengine_pthread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/threadengines/threadengine_pthread.cpp')
-rw-r--r--src/threadengines/threadengine_pthread.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/threadengines/threadengine_pthread.cpp b/src/threadengines/threadengine_pthread.cpp
index fb0b29506..65d1533f3 100644
--- a/src/threadengines/threadengine_pthread.cpp
+++ b/src/threadengines/threadengine_pthread.cpp
@@ -10,9 +10,7 @@ static void *entry_point(void *parameter)
{
Thread *thread = static_cast<Thread *>(parameter);
thread->Run();
- if (!thread->GetExitState())
- thread->Join();
- delete thread;
+ thread->SetExitState();
pthread_exit(0);
}
@@ -22,6 +20,8 @@ ThreadEngine::ThreadEngine()
{
if (pthread_attr_init(&threadengine_attr))
throw CoreException("ThreadEngine: Error calling pthread_attr_init");
+ if (pthread_attr_setdetachstate(&threadengine_attr, PTHREAD_CREATE_JOINABLE))
+ throw CoreException("ThreadEngine: Unable to mark threads as joinable");
}
/** Threadengines destructor
@@ -35,7 +35,7 @@ ThreadEngine::~ThreadEngine()
*/
void Thread::Join()
{
- SetExitState();
+ this->SetExitState();
pthread_join(Handle, NULL);
}