From 7fec549552a3df7efe93996a33da2ef12ff0681e Mon Sep 17 00:00:00 2001 From: Adrian <78108584+AdrianCassar@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:36:10 +0100 Subject: [PATCH] [XAM] Implemented XamTaskCloseHandle --- src/xenia/kernel/xam/xam_task.cc | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/xenia/kernel/xam/xam_task.cc b/src/xenia/kernel/xam/xam_task.cc index 354267f39..7844b6437 100644 --- a/src/xenia/kernel/xam/xam_task.cc +++ b/src/xenia/kernel/xam/xam_task.cc @@ -12,6 +12,8 @@ #include "xenia/kernel/user_module.h" #include "xenia/kernel/util/shim_utils.h" #include "xenia/kernel/xam/xam_private.h" +#include "xenia/kernel/xboxkrnl/xboxkrnl_error.h" +#include "xenia/kernel/xboxkrnl/xboxkrnl_threading.h" #include "xenia/kernel/xthread.h" #include "xenia/xbox.h" @@ -78,8 +80,21 @@ dword_result_t XamTaskSchedule_entry(lpvoid_t callback, } DECLARE_XAM_EXPORT2(XamTaskSchedule, kNone, kImplemented, kSketchy); -dword_result_t XamTaskShouldExit_entry(dword_t r3) { return 0; } -DECLARE_XAM_EXPORT2(XamTaskShouldExit, kNone, kStub, kSketchy); +dword_result_t XamTaskCloseHandle_entry(dword_t obj_handle) { + const X_STATUS error_code = xboxkrnl::NtClose(obj_handle); + + if (XFAILED(error_code)) { + const uint32_t result = xboxkrnl::xeRtlNtStatusToDosError(error_code); + XThread::SetLastError(result); + return false; + } + + return true; +} +DECLARE_XAM_EXPORT1(XamTaskCloseHandle, kNone, kImplemented); + +dword_result_t XamTaskShouldExit_entry() { return 0; } +DECLARE_XAM_EXPORT1(XamTaskShouldExit, kNone, kStub); } // namespace xam } // namespace kernel