diff options
author | Subv <subv2112@gmail.com> | 2014-12-04 14:13:53 +0100 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2014-12-04 14:13:53 +0100 |
commit | ef1d5cda06deac153582766fa9fc4074cb91f3d5 (patch) | |
tree | d4000cfa7373423ba38cab7e74ee396817083dc5 /src/core/hle | |
parent | SVC: Implemented GetThreadId. (diff) | |
download | yuzu-ef1d5cda06deac153582766fa9fc4074cb91f3d5.tar yuzu-ef1d5cda06deac153582766fa9fc4074cb91f3d5.tar.gz yuzu-ef1d5cda06deac153582766fa9fc4074cb91f3d5.tar.bz2 yuzu-ef1d5cda06deac153582766fa9fc4074cb91f3d5.tar.lz yuzu-ef1d5cda06deac153582766fa9fc4074cb91f3d5.tar.xz yuzu-ef1d5cda06deac153582766fa9fc4074cb91f3d5.tar.zst yuzu-ef1d5cda06deac153582766fa9fc4074cb91f3d5.zip |
Diffstat (limited to 'src/core/hle')
-rw-r--r-- | src/core/hle/kernel/thread.cpp | 16 | ||||
-rw-r--r-- | src/core/hle/kernel/thread.h | 7 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 6da238828..ccb927381 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -78,6 +78,17 @@ static Common::ThreadQueueList<Handle> thread_ready_queue; static Handle current_thread_handle; static Thread* current_thread; +static const u32 INITIAL_THREAD_ID = 1; ///< The first available thread id at startup +static u32 next_thread_id; ///< The next available thread id + +/** + * Gets the next available thread id and increments it + * @return Next available thread id + */ +static u32 NextThreadId() { + return next_thread_id++; +} + /// Gets the current thread inline Thread* GetCurrentThread() { return current_thread; @@ -327,9 +338,7 @@ Thread* CreateThread(Handle& handle, const char* name, u32 entry_point, s32 prio thread_queue.push_back(handle); thread_ready_queue.prepare(priority); - // TODO(Subv): Assign valid ids to each thread, they are much lower than handle values - // they appear to begin at 276 and continue from there - thread->thread_id = handle; + thread->thread_id = NextThreadId(); thread->status = THREADSTATUS_DORMANT; thread->entry_point = entry_point; thread->stack_top = stack_top; @@ -484,6 +493,7 @@ ResultCode GetThreadId(u32* thread_id, Handle handle) { //////////////////////////////////////////////////////////////////////////////////////////////////// void ThreadingInit() { + next_thread_id = INITIAL_THREAD_ID; } void ThreadingShutdown() { diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index e87867ac0..53a19d779 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -58,7 +58,12 @@ void Reschedule(); /// Stops the current thread ResultCode StopThread(Handle thread, const char* reason); -// Retrieves the thread id of the specified thread handle +/** + * Retrieves the ID of the specified thread handle + * @param thread_id Will contain the output thread id + * @param handle Handle to the thread we want + * @return Whether the function was successful or not + */ ResultCode GetThreadId(u32* thread_id, Handle handle); /// Resumes a thread from waiting by marking it as "ready" |