Author: nmittler Date: Sat Dec 16 12:57:24 2006 New Revision: 487881 URL: http://svn.apache.org/viewvc?view=rev&rev=487881 Log: [AMQCPP-27] Adding CloseHandle to Thread to free thread resource in win32.
Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/concurrent/Thread.cpp Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/concurrent/Thread.cpp URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/concurrent/Thread.cpp?view=diff&rev=487881&r1=487880&r2=487881 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/concurrent/Thread.cpp (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/concurrent/Thread.cpp Sat Dec 16 12:57:24 2006 @@ -36,8 +36,8 @@ pthread_attr_t threadAttribute; // Static Initializer: ThreadStaticInitializer() { - pthread_attr_init (&threadAttribute); - pthread_attr_setdetachstate (&threadAttribute, PTHREAD_CREATE_JOINABLE); + ::pthread_attr_init (&threadAttribute); + ::pthread_attr_setdetachstate (&threadAttribute, PTHREAD_CREATE_JOINABLE); } } threadStaticInitializer; #endif @@ -73,9 +73,9 @@ #ifdef unix - pthread_attr_init (&attributes); - pthread_attr_setdetachstate (&attributes, PTHREAD_CREATE_JOINABLE); - int err = pthread_create ( + ::pthread_attr_init (&attributes); + ::pthread_attr_setdetachstate (&attributes, PTHREAD_CREATE_JOINABLE); + int err = ::pthread_create ( &this->threadHandle, &attributes, runCallback, @@ -89,7 +89,7 @@ unsigned int threadId = 0; this->threadHandle = - (HANDLE)_beginthreadex(NULL, 0, runCallback, this, 0, &threadId); + (HANDLE)::_beginthreadex(NULL, 0, runCallback, this, 0, &threadId); if (this->threadHandle == NULL) { throw exceptions::ActiveMQException( __FILE__, __LINE__, "Coud not start thread"); @@ -111,9 +111,9 @@ if (!this->joined) { #ifdef unix - pthread_join(this->threadHandle, NULL); + ::pthread_join(this->threadHandle, NULL); #else - WaitForSingleObject (this->threadHandle, INFINITE); + ::WaitForSingleObject (this->threadHandle, INFINITE); #endif } @@ -134,7 +134,7 @@ } #else - Sleep (millisecs); + ::Sleep (millisecs); #endif } @@ -165,8 +165,14 @@ #ifdef unix return NULL; #else - // Return 0 if no exception was threwn. Otherwise -1. - _endthreadex(0); // Needed when using threads and CRT in Windows. Otherwise memleak can appear. + + // Needed when using threads and CRT in Windows. Otherwise memleak can appear. + ::_endthreadex(0); + + // _endthreadex (unlike _endthread) does not automatically close the thread handle + // so we need to do this manually. + ::CloseHandle(thread->threadHandle); + return 0; #endif }