X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fthreads.c;h=54438c32a79db339f7df6db0f9b19e08f24f4752;hb=eb80b37c619769496f3fca58d54c4a4b8d8fac4a;hp=3e98e44817236f3ddde21d85a52a8196434d0d75;hpb=d3a46a7874a4d535d6cb9ef00c451d0bbbb65e9c;p=tpg%2Facess2.git diff --git a/Kernel/threads.c b/Kernel/threads.c index 3e98e448..54438c32 100644 --- a/Kernel/threads.c +++ b/Kernel/threads.c @@ -20,6 +20,7 @@ extern int Proc_Clone(Uint *Err, Uint Flags); // === PROTOTYPES === void Threads_Init(); void Threads_SetName(char *NewName); +char *Threads_GetName(int ID); void Threads_SetTickets(int Num); int Threads_WaitTID(int TID, int *status); tThread *Threads_GetThread(Uint TID); @@ -96,8 +97,6 @@ void Threads_Init() cur->Quantum = 1; // 1 slice quantum HALT(); for(;;) { - //Log("---- Idle"); - //Threads_Dump(); HALT(); // Just yeilds } } @@ -119,6 +118,18 @@ void Threads_SetName(char *NewName) strcpy(cur->ThreadName, NewName); } +/** + * \fn char *Threads_GetName(int ID) + * \brief Gets a thread's name + */ +char *Threads_GetName(int ID) +{ + if(ID == -1) { + return Proc_GetCurThread()->ThreadName; + } + return NULL; +} + /** * \fn void Threads_SetTickets(int Num) * \brief Sets the 'priority' of a task @@ -142,9 +153,7 @@ void Threads_SetTickets(int Num) * \brief Wait for a task to change state */ int Threads_WaitTID(int TID, int *status) -{ - Threads_Dump(); - +{ // Any Child if(TID == -1) { @@ -260,7 +269,10 @@ tThread *Threads_int_GetPrev(tThread **List, tThread *Thread) */ void Threads_Exit(int TID, int Status) { - Threads_Kill( Proc_GetCurThread(), (Uint)Status & 0xFF ); + if( TID == 0 ) + Threads_Kill( Proc_GetCurThread(), (Uint)Status & 0xFF ); + else + Threads_Kill( Threads_GetThread(TID), (Uint)Status & 0xFF ); } /** @@ -281,7 +293,7 @@ void Threads_Kill(tThread *Thread, int Status) child; child = child->Next) { - if(child->PTID == gCurrentThread->TID) + if(child->PTID == Thread->TID) Threads_Kill(child, -1); } } @@ -457,6 +469,7 @@ void Threads_SetSignalHandler(int Num, void *Handler) /** * \fn void Threads_SendSignal(int TID, int Num) + * \brief Send a signal to a thread */ void Threads_SendSignal(int TID, int Num) { @@ -578,3 +591,14 @@ tThread *Threads_GetNextToRun(int CPU) return thread; } + +/** + * \fn void Threads_SegFault(tVAddr Addr) + * \brief Called when a Segment Fault occurs + */ +void Threads_SegFault(tVAddr Addr) +{ + //Threads_SendSignal( Proc_GetCurThread()->TID, SIGSEGV ); + Log("Thread #%i committed a segfault at address %p\n", Proc_GetCurThread()->TID, Addr); + Threads_Exit( 0, 0 ); +}