/* Thread destructor used to free stuff stored in per-thread data slot. */ static void thread_destructor(CYG_ADDRWORD data) { struct hostent *hent; hent = (struct hostent *)cyg_thread_get_data(ptdindex); if (hent) free_hent(hent); return; data=data; }
/* If there is an answer to an old query, free the memory it uses. */ static void free_stored_hent(void) { struct hostent *hent; hent = (struct hostent *)cyg_thread_get_data(ptdindex); if (hent) { free_hent(hent); cyg_thread_set_data(ptdindex, (CYG_ADDRWORD)NULL); cyg_thread_rem_destructor( &thread_destructor, 0 ); } }
void KernelLeaveTask ( void ) { PKERNEL_TASK_MEM_BLOCK pMem = NULL; KernelAcquireSpinLock(&gMemBlockPoolLock); if ( TRUE ) { pMem = gMemBlockPool.Next; while ( pMem ) { gMemBlockPool.Next = pMem->Next; KernelFreeMemory(pMem); pMem = gMemBlockPool.Next; } gMemBlockPool.Prev = NULL; gMemBlockPool.Next = NULL; } if ( TRUE ) { pMem = (PKERNEL_TASK_MEM_BLOCK)cyg_thread_get_data(0); if ( pMem ) { gMemBlockPool.Prev = pMem; gMemBlockPool.Next = pMem; } } KernelReleaseSpinLock(&gMemBlockPoolLock); cyg_thread_exit(); return; }