struct sThread *GlobalPrev; //!< Previous thread in global list
tShortSpinlock IsLocked; //!< Thread's spinlock
volatile int Status; //!< Thread Status
+ void *WaitPointer; //!< What (Mutex/Thread/other) is the thread waiting on
int RetStatus; //!< Return Status
Uint TID; //!< Thread ID
tMsg *LastMessage; //!< Last Message (speeds up insertion)
int Quantum, Remaining; //!< Quantum Size and remaining timesteps
- int NumTickets; //!< Priority - Chance of gaining CPU
+ int Priority; //!< Priority - 0: Realtime, higher means less time
Uint Config[NUM_CFG_ENTRIES]; //!< Per-process configuration
THREAD_STAT_NULL, // Invalid process
THREAD_STAT_ACTIVE, // Running and schedulable process
THREAD_STAT_SLEEPING, // Message Sleep
- THREAD_STAT_OFFSLEEP, // Mutex Sleep (or waiting on a thread)
- THREAD_STAT_WAITING, // ???
+ THREAD_STAT_MUTEXSLEEP, // Mutex Sleep
+ THREAD_STAT_WAITING, // ??? (Waiting for a thread)
THREAD_STAT_PREINIT, // Being created
- THREAD_STAT_ZOMBIE, // Died, just not removed
- THREAD_STAT_DEAD // Why do we care about these???
+ THREAD_STAT_ZOMBIE, // Died/Killed, but parent not informed
+ THREAD_STAT_DEAD, // Awaiting burial (free)
+ THREAD_STAT_BURIED // If it's still on the list here, something's wrong
+};
+static const char * const casTHREAD_STAT[] = {
+ "THREAD_STAT_NULL",
+ "THREAD_STAT_ACTIVE",
+ "THREAD_STAT_SLEEPING",
+ "THREAD_STAT_MUTEXSLEEP",
+ "THREAD_STAT_WAITING",
+ "THREAD_STAT_PREINIT",
+ "THREAD_STAT_ZOMBIE",
+ "THREAD_STAT_DEAD",
+ "THREAD_STAT_BURIED"
};
enum eFaultNumbers
// === FUNCTIONS ===
extern tThread *Proc_GetCurThread(void);
extern tThread *Threads_GetThread(Uint TID);
-extern void Threads_SetTickets(tThread *Thread, int Num);
+extern void Threads_SetPriority(tThread *Thread, int Pri);
extern int Threads_Wake(tThread *Thread);
extern void Threads_AddActive(tThread *Thread);
extern tThread *Threads_GetNextToRun(int CPU, tThread *Last);