[Quickfix-developers] QuickFix - Serious thread resources leak on Linux
Brought to you by:
orenmnero
From: Gene G. <mus...@ya...> - 2003-04-29 14:42:35
|
I have discovered that every TCP/IP connection to my Linux ThreadedSocketAcceptor based server increases memory footprint by 4-8K which is not recovered once the connection closes. After some investigation I have found that this happens because ThreadedSocketAcceptor (and possibly other Threaded*) classes create joinable threads which exit when the socket closes without either pthread_join or pthread_detach called on them. On Linux POSIX Threads implementation it is insufficent to return from joinable thread because this does not release thread resources back, hence the leak. pthread_detach has to be used to explicitly clean-up when joinability is no longer necessary. On my build I have added the following to Utility.cpp void thread_detach(int thread) { #ifdef _MSC_VER ; #else pthread_detach( thread); #endif } and called it here: void ThreadedSocketAcceptor::removeThread( int s ) { m_mutex.lock(); thread_detach(m_threads[s]); m_threads.erase( s ); m_mutex.unlock(); } This fixed the leak. Gene __________________________________ Do you Yahoo!? The New Yahoo! Search - Faster. Easier. Bingo. http://search.yahoo.com |