diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2023-12-26 11:46:11 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-26 11:46:11 -0500 |
commit | de1e5584b32edcc5b43dd7b5757ee4b361f9f70c (patch) | |
tree | a11721530b76fa281f0793ed8469fd9a847f5489 /src/core/hle/kernel | |
parent | 1559984f77c4cf7474a8f806046b709576e4e439 (diff) | |
parent | 47e44a6693ad2e8c7fbdaa23ed440d9780e1d54b (diff) |
Merge pull request #12465 from liamwhite/proper-handle-table
service: fetch objects from the client handle table
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r-- | src/core/hle/kernel/k_handle_table.h | 7 | ||||
-rw-r--r-- | src/core/hle/kernel/k_process.h | 2 | ||||
-rw-r--r-- | src/core/hle/kernel/k_server_session.cpp | 3 |
3 files changed, 4 insertions, 8 deletions
diff --git a/src/core/hle/kernel/k_handle_table.h b/src/core/hle/kernel/k_handle_table.h index 4e6dcd66b..1bf68e6b0 100644 --- a/src/core/hle/kernel/k_handle_table.h +++ b/src/core/hle/kernel/k_handle_table.h @@ -30,7 +30,7 @@ public: public: explicit KHandleTable(KernelCore& kernel) : m_kernel(kernel) {} - Result Initialize(KProcess* owner, s32 size) { + Result Initialize(s32 size) { // Check that the table size is valid. R_UNLESS(size <= static_cast<s32>(MaxTableSize), ResultOutOfMemory); @@ -44,7 +44,6 @@ public: m_next_linear_id = MinLinearId; m_count = 0; m_free_head_index = -1; - m_owner = owner; // Free all entries. for (s32 i = 0; i < static_cast<s32>(m_table_size); ++i) { @@ -91,8 +90,7 @@ public: // Handle pseudo-handles. if constexpr (std::derived_from<KProcess, T>) { if (handle == Svc::PseudoHandle::CurrentProcess) { - // TODO: this should be the current process - auto* const cur_process = m_owner; + auto* const cur_process = GetCurrentProcessPointer(m_kernel); ASSERT(cur_process != nullptr); return cur_process; } @@ -302,7 +300,6 @@ private: private: KernelCore& m_kernel; - KProcess* m_owner{}; std::array<EntryInfo, MaxTableSize> m_entry_infos{}; std::array<KAutoObject*, MaxTableSize> m_objects{}; mutable KSpinLock m_lock; diff --git a/src/core/hle/kernel/k_process.h b/src/core/hle/kernel/k_process.h index b5c6867a1..53c0e3316 100644 --- a/src/core/hle/kernel/k_process.h +++ b/src/core/hle/kernel/k_process.h @@ -552,7 +552,7 @@ private: Result InitializeHandleTable(s32 size) { // Try to initialize the handle table. - R_TRY(m_handle_table.Initialize(this, size)); + R_TRY(m_handle_table.Initialize(size)); // We succeeded, so note that we did. m_is_handle_table_initialized = true; diff --git a/src/core/hle/kernel/k_server_session.cpp b/src/core/hle/kernel/k_server_session.cpp index f6ca3dc48..adaabdd6d 100644 --- a/src/core/hle/kernel/k_server_session.cpp +++ b/src/core/hle/kernel/k_server_session.cpp @@ -1147,8 +1147,7 @@ Result KServerSession::ReceiveRequest(uintptr_t server_message, uintptr_t server *out_context = std::make_shared<Service::HLERequestContext>(m_kernel, memory, this, client_thread); (*out_context)->SetSessionRequestManager(manager); - (*out_context) - ->PopulateFromIncomingCommandBuffer(*client_thread->GetOwnerProcess(), cmd_buf); + (*out_context)->PopulateFromIncomingCommandBuffer(cmd_buf); // We succeeded. R_SUCCEED(); } else { |