Added some very pedantic warning flags
[tpg/acess2.git] / Kernel / include / threads.h
index 0af38a5..f53bbad 100644 (file)
@@ -34,6 +34,7 @@ typedef struct sThread
        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
@@ -72,11 +73,25 @@ enum {
        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_SEMAPHORESLEEP,     // Semaphore 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_SEMAPHORESLEEP",
+       "THREAD_STAT_WAITING",
+       "THREAD_STAT_PREINIT",
+       "THREAD_STAT_ZOMBIE",
+       "THREAD_STAT_DEAD",
+       "THREAD_STAT_BURIED"
 };
 
 enum eFaultNumbers
@@ -99,7 +114,21 @@ extern tThread      *Proc_GetCurThread(void);
 extern tThread *Threads_GetThread(Uint TID);
 extern void    Threads_SetPriority(tThread *Thread, int Pri);
 extern int     Threads_Wake(tThread *Thread);
+extern void    Threads_Kill(tThread *Thread, int Status);
 extern void    Threads_AddActive(tThread *Thread);
+extern tThread *Threads_RemActive(void);
 extern tThread *Threads_GetNextToRun(int CPU, tThread *Last);
 
+extern void    Threads_SetFaultHandler(Uint Handler);
+
+extern int     Threads_SetUID(Uint *Errno, tUID ID);
+extern int     Threads_SetGID(Uint *Errno, tUID ID);
+extern int     Threads_WaitTID(int TID, int *Status);
+
+extern tThread *Threads_CloneTCB(Uint *Err, Uint Flags);
+extern tThread *Threads_CloneThreadZero(void);
+
+extern int     Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data);
+extern int     Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer);
+
 #endif

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