1
0
Fork 0
forked from suyu/suyu

thread: exposed ResumeThreadFromWait function for use in other kernel modules

This commit is contained in:
bunnei 2014-05-20 21:00:10 -04:00
parent 75c6d2a8fa
commit bed4e920fa
2 changed files with 11 additions and 8 deletions

View file

@ -200,8 +200,15 @@ Thread* __NextThread() {
return Kernel::g_object_pool.GetFast<Thread>(next); return Kernel::g_object_pool.GetFast<Thread>(next);
} }
/// Puts a thread in the wait state for the given type/reason
void __WaitCurThread(WaitType wait_type, const char* reason) {
Thread* t = __GetCurrentThread();
t->wait_type = wait_type;
__ChangeThreadState(t, ThreadStatus(THREADSTATUS_WAIT | (t->status & THREADSTATUS_SUSPEND)));
}
/// Resumes a thread from waiting by marking it as "ready" /// Resumes a thread from waiting by marking it as "ready"
void __ResumeThreadFromWait(Handle handle) { void ResumeThreadFromWait(Handle handle) {
u32 error; u32 error;
Thread* t = Kernel::g_object_pool.Get<Thread>(handle, error); Thread* t = Kernel::g_object_pool.Get<Thread>(handle, error);
if (t) { if (t) {
@ -212,13 +219,6 @@ void __ResumeThreadFromWait(Handle handle) {
} }
} }
/// Puts a thread in the wait state for the given type/reason
void __WaitCurThread(WaitType wait_type, const char* reason) {
Thread* t = __GetCurrentThread();
t->wait_type = wait_type;
__ChangeThreadState(t, ThreadStatus(THREADSTATUS_WAIT | (t->status & THREADSTATUS_SUSPEND)));
}
/// Creates a new thread /// Creates a new thread
Thread* CreateThread(Handle& handle, const char* name, u32 entry_point, s32 priority, Thread* CreateThread(Handle& handle, const char* name, u32 entry_point, s32 priority,
s32 processor_id, u32 stack_top, int stack_size) { s32 processor_id, u32 stack_top, int stack_size) {

View file

@ -31,6 +31,9 @@ Handle SetupMainThread(s32 priority, int stack_size=Kernel::DEFAULT_STACK_SIZE);
/// Reschedules to the next available thread (call after current thread is suspended) /// Reschedules to the next available thread (call after current thread is suspended)
void Reschedule(const char* reason); void Reschedule(const char* reason);
/// Resumes a thread from waiting by marking it as "ready"
void ResumeThreadFromWait(Handle handle);
/// Gets the current thread /// Gets the current thread
Handle GetCurrentThread(); Handle GetCurrentThread();