I have a problem when use pthread_exit()
to exit .My code is like this:
{ ... pthread_attr_t attr; iRetValue = pthread_attr_init(&attr); iRetValue = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); size_t nStackSize = 4 * 1024 * 1024; iRetValue = pthread_attr_setstacksize(&attr, nStackSize); while(condition) { ... int32 iSockId = cServSocket.accept(); if(iSockId < 0) { continue; } pthread_t tid; int32* pSockId = new int(iSockId); iRetValue = pthread_create(&tid, &attr, run_thread, (void*)pSockId); ... } ... pthread_attr_destroy(&attr); } void* run_thread(void* p) { int32 iSockId = *(int32*)p; if(p != NULL){delete p} int32 iRetValue = g_dealMgr.deal_thread(iSockId); return (void*)iRetValue; } int32 CDealMgr::deal_thread(int32 iSocket) { ... // many temporarydata create,expect will release autoly pthread_exit((void*)1); return 0; }
In fact, it causes memory leaks,and when I move pthread_exit((void*)1);
to run_thread
,like this
void* run_thread(void* p) { int32 iSockId = *(int32*)p; if(p != NULL){delete p} int32 iRetValue = g_dealMgr.deal_thread(iSockId); pthread_exit((void*)1); return (void*)iRetValue; } int32 CDealMgr::deal_thread(int32 iSocket) { ... // many temporary data create,expect will release autoly return 0; }
memory leaks disappear. Now, my question is, why pthread_exit()
used in the function run_thread()
called will cause memory leaks ,hope someone can help me,thank you very much.