Usermode/libc - scanf/stdio fixes
[tpg/acess2.git] / KernelLand / Kernel / include / threads_int.h
index 66bb8c1..4845264 100644 (file)
@@ -1,5 +1,9 @@
 /*
- * Internal Threading header
+ * Acess2 Kernel
+ * - By John Hodge (thePowersGang)
+ *
+ * include/threads_int.h
+ * - Internal Threading header
  * - Only for use by stuff that needs access to the thread type.
  */
 #ifndef _THREADS_INT_H_
@@ -7,7 +11,7 @@
 
 #include <threads.h>
 #include <proc.h>
-
+#include <timers_int.h>
 
 typedef struct sProcess        tProcess;
 
@@ -27,8 +31,12 @@ typedef struct sMessage
  */
 struct sProcess
 {
+       struct sProcess *Next;
+       tPGID   PGID;
        tPID    PID;
+
         int    nThreads;
+       struct sThread  *FirstThread;
        
        tUID    UID;    //!< User ID
        tGID    GID;    //!< User and Group
@@ -53,6 +61,7 @@ struct sThread
        struct sThread  *Next;
        struct sThread  *GlobalNext;    //!< Next thread in global list
        struct sThread  *GlobalPrev;    //!< Previous thread in global list
+       struct sThread  *ProcessNext;
        tShortSpinlock  IsLocked;       //!< Thread's spinlock
        volatile int    Status;         //!< Thread Status
        void    *WaitPointer;   //!< What (Mutex/Thread/other) is the thread waiting on
@@ -62,7 +71,10 @@ struct sThread
        struct sProcess *Process;       //!< Thread Group / Process
        struct sThread  *Parent;        //!< Parent Thread
        char    *ThreadName;    //!< Name of thread
-       
+
+       struct sThread  *LastDeadChild; //!< Last child to die (will have the \a DeadChildren lock)
+       tMutex  DeadChildLock;  //!< Lock to prevent clobbering of \a LastDeadChild, acquired by child, released by parent
+
        // --- arch/proc.c's responsibility
        //! Kernel Stack Base
        tVAddr  KernelStack;
@@ -88,14 +100,17 @@ struct sThread
        
        // --- event.c
        Uint32  EventState;
+       // --- timer.c
+       tTimer  ThreadTimer;
 };
 
 
-enum {
+enum eThreadStatus {
        THREAD_STAT_NULL,       // Invalid process
        THREAD_STAT_ACTIVE,     // Running and schedulable process
        THREAD_STAT_SLEEPING,   // Message Sleep
        THREAD_STAT_MUTEXSLEEP, // Mutex Sleep
+       THREAD_STAT_RWLOCKSLEEP,        // Read-Writer lock Sleep
        THREAD_STAT_SEMAPHORESLEEP,     // Semaphore Sleep
        THREAD_STAT_QUEUESLEEP, // Queue
        THREAD_STAT_EVENTSLEEP, // Event sleep
@@ -125,8 +140,6 @@ extern BOOL gaThreads_NoTaskSwitch[MAX_CPUS];
 extern tShortSpinlock  glThreadListLock;
 
 // === FUNCTIONS ===
-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);

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