|
|
@@ -49,6 +49,8 @@ public:
|
|
|
|
|
|
ThreadContext context;
|
|
|
|
|
|
+ u32 thread_id;
|
|
|
+
|
|
|
u32 status;
|
|
|
u32 entry_point;
|
|
|
u32 stack_top;
|
|
|
@@ -325,6 +327,9 @@ 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->status = THREADSTATUS_DORMANT;
|
|
|
thread->entry_point = entry_point;
|
|
|
thread->stack_top = stack_top;
|
|
|
@@ -465,6 +470,17 @@ void Reschedule() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ResultCode GetThreadId(u32* thread_id, Handle handle) {
|
|
|
+ Thread* thread = g_object_pool.Get<Thread>(handle);
|
|
|
+ if (thread == nullptr)
|
|
|
+ return ResultCode(ErrorDescription::InvalidHandle, ErrorModule::OS,
|
|
|
+ ErrorSummary::WrongArgument, ErrorLevel::Permanent);
|
|
|
+
|
|
|
+ *thread_id = thread->thread_id;
|
|
|
+
|
|
|
+ return RESULT_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void ThreadingInit() {
|