From 36b9b4b39900d1b2e3b182e1b50370b0c9dcb9ae Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Tue, 24 Jun 2014 12:45:21 +0200 Subject: Change allocation of ThreadData to be physically part of the object containing it --- include/threadengine.h | 4 ++-- src/threadengine.cpp | 4 +--- src/threadengines/threadengine_pthread.cpp | 9 +-------- src/threadengines/threadengine_win32.cpp | 9 ++------- 4 files changed, 6 insertions(+), 20 deletions(-) diff --git a/include/threadengine.h b/include/threadengine.h index 39f150566..e656eb6b3 100644 --- a/include/threadengine.h +++ b/include/threadengine.h @@ -49,11 +49,11 @@ class CoreExport Thread public: /** Opaque thread state managed by threading engine */ - ThreadData* state; + ThreadData state; /** Set Creator to NULL at this point */ - Thread() : ExitFlag(false), state(NULL) + Thread() : ExitFlag(false) { } diff --git a/src/threadengine.cpp b/src/threadengine.cpp index 4269c1aef..82aa78a36 100644 --- a/src/threadengine.cpp +++ b/src/threadengine.cpp @@ -26,9 +26,7 @@ void Thread::SetExitFlag() void Thread::join() { - state->FreeThread(this); - delete state; - state = 0; + state.FreeThread(this); } /** If this thread has a Creator set, call it to diff --git a/src/threadengines/threadengine_pthread.cpp b/src/threadengines/threadengine_pthread.cpp index 36ba3ab42..7900e66bc 100644 --- a/src/threadengines/threadengine_pthread.cpp +++ b/src/threadengines/threadengine_pthread.cpp @@ -39,15 +39,8 @@ static void* entry_point(void* parameter) void ThreadEngine::Start(Thread* thread) { - ThreadData* data = new ThreadData; - thread->state = data; - - if (pthread_create(&data->pthread_id, NULL, entry_point, thread) != 0) - { - thread->state = NULL; - delete data; + if (pthread_create(&thread->state.pthread_id, NULL, entry_point, thread) != 0) throw CoreException("Unable to create new thread: " + std::string(strerror(errno))); - } } void ThreadData::FreeThread(Thread* thread) diff --git a/src/threadengines/threadengine_win32.cpp b/src/threadengines/threadengine_win32.cpp index 77f638f37..3376f937a 100644 --- a/src/threadengines/threadengine_win32.cpp +++ b/src/threadengines/threadengine_win32.cpp @@ -23,17 +23,12 @@ void ThreadEngine::Start(Thread* thread) { - ThreadData* data = new ThreadData; - thread->state = data; - DWORD ThreadId = 0; - data->handle = CreateThread(NULL,0,ThreadEngine::Entry,thread,0,&ThreadId); + thread->state.handle = CreateThread(NULL, 0, ThreadEngine::Entry, thread, 0, &ThreadId); - if (data->handle == NULL) + if (thread->state.handle == NULL) { DWORD lasterr = GetLastError(); - thread->state = NULL; - delete data; std::string err = "Unable to create new thread: " + ConvToStr(lasterr); SetLastError(ERROR_SUCCESS); throw CoreException(err); -- cgit v1.2.3