X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fthreads.c;h=708c2ba0c463e1801b695747c0260e31e640574e;hb=e4b700d576ea9155c3fc86b0c57869a224851954;hp=da65596b042bcf9d73f88351173ffb6f8f1257a5;hpb=b7cb35206a853700c5f136a79113190bfae9a6bd;p=tpg%2Facess2.git diff --git a/Kernel/threads.c b/Kernel/threads.c index da65596b..708c2ba0 100644 --- a/Kernel/threads.c +++ b/Kernel/threads.c @@ -30,6 +30,7 @@ void Threads_Kill(tThread *Thread, int Status); void Threads_Yield(); void Threads_Sleep(); void Threads_Wake(tThread *Thread); +void Threads_AddActive(tThread *Thread); int Threads_GetPID(); int Threads_GetTID(); int Threads_GetUID(); @@ -426,6 +427,22 @@ void Threads_Wake(tThread *Thread) } } +/** + * \fn void Threads_AddActive(tThread *Thread) + * \brief Adds a thread to the active queue + */ +void Threads_AddActive(tThread *Thread) +{ + LOCK( &giThreadListLock ); + Thread->Next = gActiveThreads; + gActiveThreads = Thread; + giNumActiveThreads ++; + giTotalTickets += Thread->NumTickets; + //Log("Threads_AddActive: giNumActiveThreads = %i, giTotalTickets = %i", + // giNumActiveThreads, giTotalTickets); + RELEASE( &giThreadListLock ); +} + #if 0 /** * \fn void Threads_SetSignalHandler(int Num, void *Handler) @@ -535,9 +552,13 @@ tThread *Threads_GetNextToRun(int CPU) return gActiveThreads; } + Log(" Threads_GetNextToRun: giNumActiveThreads=%i,giTotalTickets=%i", + giNumActiveThreads, giTotalTickets); // Get the ticket number ticket = number = rand() % giTotalTickets; + Log(" Threads_GetNextToRun: ticket = %i", ticket); + // Find the next thread for(thread=gActiveThreads;thread;thread=thread->Next) {