X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fthreads.c;h=1781f69923440ef8a4e4f8f0ff2c84a170fef726;hb=61f8c4191fe461a6d034a9c71715e37b3a455d6a;hp=280f7f286cd20cca9bce0796d0b3f60e6b23cf2e;hpb=d41554e6b486a0a50f23720869582f0b1fae3f6f;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/threads.c b/KernelLand/Kernel/threads.c index 280f7f28..1781f699 100644 --- a/KernelLand/Kernel/threads.c +++ b/KernelLand/Kernel/threads.c @@ -49,7 +49,7 @@ void Threads_Delete(tThread *Thread); char *Threads_GetName(tTID ID); #if 0 void Threads_SetPriority(tThread *Thread, int Pri); -tThread *Threads_CloneTCB(Uint *Err, Uint Flags); +tThread *Threads_CloneTCB(Uint Flags); int Threads_WaitTID(int TID, int *status); tThread *Threads_GetThread(Uint TID); #endif @@ -59,9 +59,7 @@ void Threads_int_AddToList(tThreadList *List, tThread *Thread); void Threads_Exit(int TID, int Status); void Threads_Kill(tThread *Thread, int Status); void Threads_Yield(void); -#endif -void Threads_int_Sleep(enum eThreadStatus Status, void *Ptr, int Num, tThread **ListHead, tThread **ListTail, tShortSpinlock *Lock); -#if 0 + int Threads_int_Sleep(enum eThreadStatus Status, void *Ptr, int Num, tThread **ListHead, tThread **ListTail, tShortSpinlock *Lock); void Threads_Sleep(void); int Threads_Wake(tThread *Thread); void Threads_AddActive(tThread *Thread); @@ -754,7 +752,7 @@ void Threads_int_WaitForStatusEnd(enum eThreadStatus Status) } } -void Threads_int_Sleep(enum eThreadStatus Status, void *Ptr, int Num, tThread **ListHead, tThread **ListTail, tShortSpinlock *Lock) +int Threads_int_Sleep(enum eThreadStatus Status, void *Ptr, int Num, tThread **ListHead, tThread **ListTail, tShortSpinlock *Lock) { SHORTLOCK( &glThreadListLock ); tThread *us = Threads_RemActive(); @@ -768,12 +766,11 @@ void Threads_int_Sleep(enum eThreadStatus Status, void *Ptr, int Num, tThread ** if( ListTail ) { if(*ListTail) { (*ListTail)->Next = us; - *ListTail = us; } else { *ListHead = us; - *ListTail = us; } + *ListTail = us; } else { *ListHead = us; @@ -783,8 +780,10 @@ void Threads_int_Sleep(enum eThreadStatus Status, void *Ptr, int Num, tThread ** // return ; SHORTREL( &glThreadListLock ); if( Lock ) - SHORTLOCK( Lock ); + SHORTREL( Lock ); Threads_int_WaitForStatusEnd(Status); + us->WaitPointer = NULL; + return us->RetStatus; } /** @@ -1259,7 +1258,7 @@ void Threads_int_DumpThread(tThread *thread) ); break; case THREAD_STAT_EVENTSLEEP: - // TODO: Event mask + Log(" Event Mask: %x", thread->RetStatus); break; case THREAD_STAT_ZOMBIE: Log(" Return Status: %i", thread->RetStatus);