extern Uint GetEIP(); // start.asm
extern Uint32 gaInitPageDir[1024]; // start.asm
extern void Kernel_Stack_Top;
-extern volatile int giThreadListLock;
+extern tSpinlock glThreadListLock;
extern int giNumCPUs;
extern int giNextTID;
extern int giTotalTickets;
extern void Threads_Dump();
extern tThread *Threads_CloneTCB(Uint *Err, Uint Flags);
extern void Isr8(); // Double Fault
-extern void Proc_AlterUserReturnAddr();
+extern void Proc_ReturnToUser();
// === PROTOTYPES ===
void ArchThreads_Init();
{
// Rewinds the stack and calls the user function
// Never returns
- __asm__ __volatile__ ("mov %0, %%ebp;\n\tcall Proc_AlterUserReturnAddr" :: "r"(Thread->FaultHandler));
+ __asm__ __volatile__ ("mov %0, %%ebp;\n\tcall Proc_ReturnToUser" :: "r"(Thread->FaultHandler));
for(;;);
}
tThread *thread;
// If the spinlock is set, let it complete
- if(giThreadListLock) return;
+ if(IS_LOCKED(&glThreadListLock)) return;
// Clear Delete Queue
while(gDeleteThreads)