Usermode/AxWin3 - Working on the libaxwin3 API
[tpg/acess2.git] / Kernel / threads.c
index 57382a8..1393f54 100644 (file)
@@ -634,14 +634,16 @@ void Threads_Kill(tThread *Thread, int Status)
        
        // Save exit status
        Thread->RetStatus = Status;
-       
+
        // Don't Zombie if we are being killed because our parent is
        if(Status == -1)
        {
                Thread->Status = THREAD_STAT_DEAD;
                Threads_AddToDelete( Thread );
+               SHORTREL( &glThreadListLock );
        } else {
                Thread->Status = THREAD_STAT_ZOMBIE;
+               SHORTREL( &glThreadListLock );
                // Wake parent
                Threads_Wake( Thread->Parent );
        }
@@ -649,7 +651,6 @@ void Threads_Kill(tThread *Thread, int Status)
        Log("Thread %i went *hurk* (%i)", Thread->TID, Status);
        
        // Release spinlocks
-       SHORTREL( &glThreadListLock );
        SHORTREL( &Thread->IsLocked );  // TODO: We may not actually be released...
        
        // And, reschedule
@@ -665,7 +666,7 @@ void Threads_Kill(tThread *Thread, int Status)
  */
 void Threads_Yield(void)
 {
-       Log("Threads_Yield: by %p", __builtin_return_address(0));
+//     Log("Threads_Yield: by %p", __builtin_return_address(0));
        Proc_Reschedule();
 }
 
@@ -734,12 +735,12 @@ int Threads_Wake(tThread *Thread)
                // Remove from sleeping queue
                Threads_int_DelFromQueue(&gSleepingThreads, Thread);
                
+               SHORTREL( &glThreadListLock );
                Threads_AddActive( Thread );
                
                #if DEBUG_TRACE_STATE
                Log("Threads_Sleep: %p (%i %s) woken", Thread, Thread->TID, Thread->ThreadName);
                #endif
-               SHORTREL( &glThreadListLock );
                return -EOK;
        
        case THREAD_STAT_SEMAPHORESLEEP: {
@@ -782,9 +783,7 @@ int Threads_Wake(tThread *Thread)
                                sem->LastSignaling = prev;
                }
                
-               SHORTLOCK( &glThreadListLock );
                Threads_AddActive( Thread );
-               SHORTREL( &glThreadListLock );
                
                #if DEBUG_TRACE_STATE
                Log("Threads_Sleep: %p(%i %s) woken from semaphore", Thread, Thread->TID, Thread->ThreadName);
@@ -1662,12 +1661,12 @@ int Semaphore_Signal(tSemaphore *Sem, int AmmountToAdd)
                #endif
                
                // Wake the sleeper
-               SHORTLOCK( &glThreadListLock );
+//             SHORTLOCK( &glThreadListLock );
                if( toWake->Status != THREAD_STAT_ACTIVE )
                        Threads_AddActive(toWake);
                else
                        Warning("Thread %p (%i %s) is already awake", toWake, toWake->TID, toWake->ThreadName);
-               SHORTREL( &glThreadListLock );
+//             SHORTREL( &glThreadListLock );
        }
        SHORTREL( &Sem->Protector );
        

UCC git Repository :: git.ucc.asn.au