- // Ensure that we are not rescheduled
- Thread->Remaining = 0; // Clear Remaining Quantum
- Thread->Quantum = 0; // Clear Quantum to indicate dead thread
-
- // Update bookkeeping
- giNumActiveThreads --;
- #if SCHEDULER_TYPE == SCHED_LOTTERY
- if( Thread != Proc_GetCurThread() )
- giFreeTickets -= caiTICKET_COUNTS[ Thread->Priority ];
- #endif
+ // Currently active thread
+ case THREAD_STAT_ACTIVE:
+ #if SCHEDULER_TYPE == SCHED_RR_PRI
+ if( Threads_int_DelFromQueue( &gaActiveThreads[Thread->Priority], Thread ) )
+ #else
+ if( Threads_int_DelFromQueue( &gActiveThreads, Thread ) )
+ #endif
+ {
+ // Ensure that we are not rescheduled
+ Thread->Remaining = 0; // Clear Remaining Quantum
+ Thread->Quantum = 0; // Clear Quantum to indicate dead thread
+
+ // Update bookkeeping
+ giNumActiveThreads --;
+ #if SCHEDULER_TYPE == SCHED_LOTTERY
+ if( Thread != Proc_GetCurThread() )
+ giFreeTickets -= caiTICKET_COUNTS[ Thread->Priority ];
+ #endif
+ }
+ else
+ {
+ Log_Warning("Threads",
+ "Threads_Kill - Thread %p(%i,%s) marked as active, but not on list",
+ Thread, Thread->TID, Thread->ThreadName
+ );
+ }
+ break;
+ case THREAD_STAT_SLEEPING:
+ if( !Threads_int_DelFromQueue( &gSleepingThreads, Thread ) )
+ {
+ Log_Warning("Threads",
+ "Threads_Kill - Thread %p(%i,%s) marked as sleeping, but not on list",
+ Thread, Thread->TID, Thread->ThreadName
+ );
+ }
+ break;
+ default:
+ Log_Warning("Threads", "Threads_Kill - BUG Un-checked status (%i)",
+ Thread->Status);
+ break;
+ }