+ Debug("Thread %p(%i %s) rescheduled while in %s state for %p",
+ us, us->TID, us->ThreadName,
+ casTHREAD_STAT[Status],
+ __builtin_return_address(0));
+ }
+}
+
+void Threads_int_Sleep(enum eThreadStatus Status, void *Ptr, int Num, tThread **ListHead, tThread **ListTail, tShortSpinlock *Lock)
+{
+ SHORTLOCK( &glThreadListLock );
+ tThread *us = Threads_RemActive();
+ us->Next = NULL;
+ // - Mark as sleeping
+ us->Status = Status;
+ us->WaitPointer = Ptr;
+ us->RetStatus = Num; // Use RetStatus as a temp variable
+
+ // - Add to waiting
+ if( ListTail ) {
+ if(*ListTail) {
+ (*ListTail)->Next = us;
+ *ListTail = us;
+ }
+ else {
+ *ListHead = us;
+ *ListTail = us;
+ }