void Threads_SetTickets(int Num);
int Threads_WaitTID(int TID, int *status);
tThread *Threads_GetThread(Uint TID);
+void Threads_AddToDelete(tThread *Thread);
tThread *Threads_int_GetPrev(tThread **List, tThread *Thread);
void Threads_Exit(int TID, int Status);
void Threads_Kill(tThread *Thread, int Status);
{
case THREAD_STAT_ZOMBIE:
t->Status = THREAD_STAT_DEAD;
- *status = 0;
+ if(status) *status = 0;
+ Threads_AddToDelete( t );
break;
default:
- *status = -1;
+ if(status) *status = -1;
break;
}
return ret;
return NULL;
}
+/**
+ * \fn void Threads_AddToDelete(tThread *Thread)
+ * \brief Adds a thread to the delete queue
+ */
+void Threads_AddToDelete(tThread *Thread)
+{
+ // Add to delete queue
+ if(gDeleteThreads) {
+ Thread->Next = gDeleteThreads;
+ gDeleteThreads = Thread;
+ } else {
+ Thread->Next = NULL;
+ gDeleteThreads = Thread;
+ }
+}
+
/**
* \fn tThread *Threads_int_GetPrev(tThread *List, tThread *Thread)
* \brief Gets the previous entry in a thead linked list
if(Status == -1)
{
Thread->Status = THREAD_STAT_DEAD;
- // Add to delete queue
- if(gDeleteThreads) {
- Thread->Next = gDeleteThreads;
- gDeleteThreads = Thread;
- } else {
- Thread->Next = NULL;
- gDeleteThreads = Thread;
- }
+ Threads_AddToDelete( Thread );
} else {
Thread->Status = THREAD_STAT_ZOMBIE;
}