// -- Core Thread --
// Only used for the core kernel
tThread gThreadZero = {
- Status: THREAD_STAT_ACTIVE, // Status
- ThreadName: (char*)"ThreadZero", // Name
- Quantum: DEFAULT_QUANTUM, // Default Quantum
- Remaining: DEFAULT_QUANTUM, // Current Quantum
- Priority: DEFAULT_PRIORITY // Number of tickets
+ .Status = THREAD_STAT_ACTIVE, // Status
+ .ThreadName = (char*)"ThreadZero", // Name
+ .Quantum = DEFAULT_QUANTUM, // Default Quantum
+ .Remaining = DEFAULT_QUANTUM, // Current Quantum
+ .Priority = DEFAULT_PRIORITY // Number of tickets
};
// -- Processes --
// --- Locks ---
tThread *cur = Proc_GetCurThread();
Warning("WTF, CPU%i %p (%i %s) is adding %p (%i %s) when it is active",
GetCPUNum(), cur, cur->TID, cur->ThreadName, Thread, Thread->TID, Thread->ThreadName);
+ SHORTREL( &glThreadListLock );
+ return ;
}
// Set state
//
void Semaphore_Init(tSemaphore *Sem, int Value, int MaxValue, const char *Module, const char *Name)
{
+ memset(Sem, 0, sizeof(tSemaphore));
Sem->Value = Value;
Sem->ModName = Module;
Sem->Name = Name;
+ Sem->MaxValue = MaxValue;
}
//
// Wait for items to be avaliable
if( Sem->MaxValue && Sem->Value == Sem->MaxValue )
{
tThread *us;
- SHORTLOCK( &glThreadListLock );
+ #if 0
+ Log_Debug("Threads", "Semaphore_Signal: IDLE Sem = %s:%s", Sem->ModName, Sem->Name);
+ Log_Debug("Threads", "Semaphore_Signal: Sem->Value(%i) == Sem->MaxValue(%i)", Sem->Value, Sem->MaxValue);
+ #endif
+ SHORTLOCK( &glThreadListLock );
// - Remove from active list
us = Threads_RemActive();
us->Next = NULL;