- // Clear Delete Queue
- // - I should probably put this in a worker thread to avoid calling free() in the scheduler
- // DEFINITELY - free() can deadlock in this case
- // I'll do it when it becomes an issue
- while(gDeleteThreads)
- {
- thread = gDeleteThreads->Next;
- // Only free if structure is unused
- if( !IS_LOCKED(&gDeleteThreads->IsLocked) )
- {
- // Set to dead
- gDeleteThreads->Status = THREAD_STAT_BURIED;
- // Free name
- if( IsHeap(gDeleteThreads->ThreadName) )
- free(gDeleteThreads->ThreadName);
- // Remove from global list
- if( gDeleteThreads == gAllThreads )
- gAllThreads = gDeleteThreads->GlobalNext;
- else
- gDeleteThreads->GlobalPrev->GlobalNext = gDeleteThreads->GlobalNext;
- free( gDeleteThreads );
- }
- gDeleteThreads = thread;
- }
-