X-Git-Url: https://git.pterodactylus.net/?p=fms.git;a=blobdiff_plain;f=src%2Fpthreadwrapper%2Fthread.cpp;h=07cb6898714642846cdcaef9560b7c09cc72d9dc;hp=d08cf332685d09a22311cd86607731009ab6cc11;hb=df316253862dc50e8e5a790d9634ef90be37badb;hpb=f60495a029c54358f82956482fe203fe2b7b5b23 diff --git a/src/pthreadwrapper/thread.cpp b/src/pthreadwrapper/thread.cpp index d08cf33..07cb689 100644 --- a/src/pthreadwrapper/thread.cpp +++ b/src/pthreadwrapper/thread.cpp @@ -27,6 +27,9 @@ void Sleep(const long ms) pthread_mutex_lock(&m); pthread_cond_timedwait(&c,&m,&t); pthread_mutex_unlock(&m); + + pthread_cond_destroy(&c); + pthread_mutex_destroy(&m); } Thread::Thread() @@ -35,6 +38,7 @@ Thread::Thread() m_cancelled=false; m_runnable=0; m_threadnum=0; + m_threadcleaned=true; } Thread::Thread(Runnable *runnable) @@ -43,6 +47,7 @@ Thread::Thread(Runnable *runnable) m_cancelled=false; m_runnable=runnable; m_threadnum=0; + m_threadcleaned=true; if(m_runnable) { m_runnable->m_thread=this; @@ -54,6 +59,10 @@ Thread::~Thread() { Cancel(); Join(); + if(m_threadcleaned==false) + { + pthread_detach(m_thread); + } if(m_runnable) { delete m_runnable; @@ -85,6 +94,7 @@ void Thread::Join() if(m_running) { pthread_join(m_thread,NULL); + m_threadcleaned=true; } } @@ -108,12 +118,16 @@ void Thread::Sleep(const long ms) pthread_mutex_lock(&m); pthread_cond_timedwait(&c,&m,&t); pthread_mutex_unlock(&m); + + pthread_cond_destroy(&c); + pthread_mutex_destroy(&m); } } void Thread::Start() { m_running=true; + m_threadcleaned=false; m_threadnum=pthread_create(&m_thread,NULL,Thread::EntryPoint,this); }