Kernel/threads - Debug cleanups and (hopefully) race avoidance
[tpg/acess2.git] / KernelLand / Kernel / include / threads_int.h
index 4845264..1c9a08d 100644 (file)
@@ -12,6 +12,7 @@
 #include <threads.h>
 #include <proc.h>
 #include <timers_int.h>
+#include <posix_signals.h>
 
 typedef struct sProcess        tProcess;
 
@@ -32,6 +33,7 @@ typedef struct sMessage
 struct sProcess
 {
        struct sProcess *Next;
+       struct sProcess *Prev;
        tPGID   PGID;
        tPID    PID;
 
@@ -45,6 +47,8 @@ struct sProcess
         int    MaxFD;
        char    *CurrentWorkingDir;
        char    *RootDir;
+       
+       void    *SignalHandlers[NSIGNALS];
 };
 
 /**
@@ -86,6 +90,10 @@ struct sThread
         int    CurFaultNum;    //!< Current fault number, 0: none
        tVAddr  FaultHandler;   //!< Fault Handler
        
+       
+        int    PendingSignal;  //!< Pending signal ID (0 = none)
+       
+       
        tMsg * volatile Messages;       //!< Message Queue
        tMsg    *LastMessage;   //!< Last Message (speeds up insertion)
        
@@ -125,6 +133,7 @@ static const char * const casTHREAD_STAT[] = {
        "THREAD_STAT_ACTIVE",
        "THREAD_STAT_SLEEPING",
        "THREAD_STAT_MUTEXSLEEP",
+       "THREAD_STAT_RWLOCKSLEEP",
        "THREAD_STAT_SEMAPHORESLEEP",
        "THREAD_STAT_QUEUESLEEP",
        "THREAD_STAT_EVENTSLEEP",
@@ -134,6 +143,7 @@ static const char * const casTHREAD_STAT[] = {
        "THREAD_STAT_DEAD",
        "THREAD_STAT_BURIED"
 };
+static const unsigned int ciTHREAD_STAT_COUNT = sizeof(casTHREAD_STAT)/sizeof(casTHREAD_STAT[0]);
 
 // === GLOBALS ===
 extern BOOL    gaThreads_NoTaskSwitch[MAX_CPUS];
@@ -152,4 +162,8 @@ extern tThread      *Threads_GetNextToRun(int CPU, tThread *Last);
 extern tThread *Threads_CloneTCB(Uint Flags);
 extern tThread *Threads_CloneThreadZero(void);
 
+extern int     Threads_int_Sleep(enum eThreadStatus Status, void *Ptr, int Num, tThread **ListHead, tThread **ListTail, tShortSpinlock *Lock);
+extern void    Threads_int_WaitForStatusEnd(enum eThreadStatus Status);
+extern void    Semaphore_ForceWake(tThread *Thread);
+
 #endif

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