* threads.c
* - Threads handling
*/
+#define DEBUG 0
#include <acess.h>
#include <threads.h>
#include <threads_int.h>
tTID Threads_GetTID(void) { return lpThreads_This ? lpThreads_This->TID : 0; }
-int *Threads_GetMaxFD(void) { return &lpThreads_This->Process->MaxFDs; }
-char **Threads_GetCWD(void) { return &lpThreads_This->Process->CWD; }
-char **Threads_GetChroot(void) { return &lpThreads_This->Process->Chroot; }
+static inline tProcess* getproc(tProcess *Process) {
+ return (Process ? Process : lpThreads_This->Process);
+}
+int *Threads_GetMaxFD(tProcess *Process) { return &getproc(Process)->MaxFDs; }
+char **Threads_GetCWD(tProcess *Process) { return &getproc(Process)->CWD; }
+char **Threads_GetChroot(tProcess *Process) { return &getproc(Process)->Chroot; }
void **Threads_GetHandlesPtr(void) { return &lpThreads_This->Process->Handles; }
void Threads_Yield(void)
{
Thread->Status = THREAD_STAT_ACTIVE;
// Increment state-change semaphore
+ LOG("Waking %p(%i %s)", Thread, Thread->TID, Thread->ThreadName);
Threads_int_SemSignal(Thread->WaitSemaphore);
}
Log_Warning("Threads", "Thread %p(%i %s) rescheduled while in %s state",
us, us->TID, us->ThreadName, casTHREAD_STAT[Status]);
}
+ LOG("%p(%i %s) Awake", us, us->TID, us->ThreadName);
}
int Threads_int_Sleep(enum eThreadStatus Status, void *Ptr, int Num, tThread **ListHead, tThread **ListTail, tShortSpinlock *Lock)