X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Kernel%2Fthreads.c;h=4ab76ff6334f816d982c478bca97d132d84d52e7;hb=0302a53b419f8c56193c75bcbd068cc89ae4df0b;hp=c4169fec0905d0e06a72e4ad5f3acf80c5d2b0a4;hpb=0f8226381e0a19e8e8e11eafbf4589532e45d430;p=tpg%2Facess2.git diff --git a/Kernel/threads.c b/Kernel/threads.c index c4169fec..4ab76ff6 100644 --- a/Kernel/threads.c +++ b/Kernel/threads.c @@ -7,6 +7,7 @@ #include #include #include +#include #include // Configuration @@ -23,7 +24,7 @@ #define SCHEDULER_TYPE SCHED_RR_PRI // === CONSTANTS === -#define DEFAULT_QUANTUM 10 +#define DEFAULT_QUANTUM 5 #define DEFAULT_PRIORITY 5 #define MIN_PRIORITY 10 const enum eConfigTypes cCONFIG_TYPES[] = { @@ -861,13 +862,23 @@ void Threads_AddActive(tThread *Thread) Thread->Status = THREAD_STAT_ACTIVE; // Thread->CurCPU = -1; // Add to active list - #if SCHEDULER_TYPE == SCHED_RR_PRI - Thread->Next = gaActiveThreads[Thread->Priority]; - gaActiveThreads[Thread->Priority] = Thread; - #else - Thread->Next = gActiveThreads; - gActiveThreads = Thread; - #endif + { + tThread *tmp, *prev = NULL; + #if SCHEDULER_TYPE == SCHED_RR_PRI + for( tmp = gaActiveThreads[Thread->Priority]; tmp; prev = tmp, tmp = tmp->Next ); + if(prev) + prev->Next = Thread; + else + gaActiveThreads[Thread->Priority] = Thread; + #else + for( tmp = gActiveThreads; tmp; prev = tmp, tmp = tmp->Next ); + if(prev) + prev->Next = Thread; + else + gActiveThreads = Thread; + #endif + Thread->Next = NULL; + } // Update bookkeeping giNumActiveThreads ++;