X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Finclude%2Fthreads_int.h;h=d7706680280440471188b7a7d7637ff0b419d617;hb=97629e9f86a9cf7162649550b74b112a4fb1765f;hp=881db4ab0552bfbf891e8095847cefc2f40d0392;hpb=03522f70735d2db32e52e2fd5388439570ab0d0f;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/include/threads_int.h b/KernelLand/Kernel/include/threads_int.h index 881db4ab..d7706680 100644 --- a/KernelLand/Kernel/include/threads_int.h +++ b/KernelLand/Kernel/include/threads_int.h @@ -12,6 +12,7 @@ #include #include #include +#include typedef struct sProcess tProcess; @@ -45,6 +46,8 @@ struct sProcess int MaxFD; char *CurrentWorkingDir; char *RootDir; + + void *SignalHandlers[NSIGNALS]; }; /** @@ -71,7 +74,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; @@ -83,6 +89,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) @@ -102,7 +112,7 @@ struct sThread }; -enum { +enum eThreadStatus { THREAD_STAT_NULL, // Invalid process THREAD_STAT_ACTIVE, // Running and schedulable process THREAD_STAT_SLEEPING, // Message Sleep @@ -122,6 +132,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", @@ -149,4 +160,7 @@ extern tThread *Threads_GetNextToRun(int CPU, tThread *Last); extern tThread *Threads_CloneTCB(Uint Flags); extern tThread *Threads_CloneThreadZero(void); +extern void Threads_int_WaitForStatusEnd(enum eThreadStatus Status); +extern void Semaphore_ForceWake(tThread *Thread); + #endif