From f6d45b747e37ed1871d9155fbf2d3d5099e1c1b8 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sat, 1 May 2021 12:48:41 -0700 Subject: [PATCH] fixup! hle: kernel: Migrate KSession, KClientSession, and KServerSession to KAutoObject. --- src/core/hle/kernel/k_server_session.h | 4 ++-- src/core/hle/kernel/k_session.cpp | 24 +++++++++++++++--------- src/core/hle/kernel/k_session.h | 22 +++++++++++----------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/core/hle/kernel/k_server_session.h b/src/core/hle/kernel/k_server_session.h index 4a54e6634f..77095bb855 100644 --- a/src/core/hle/kernel/k_server_session.h +++ b/src/core/hle/kernel/k_server_session.h @@ -47,11 +47,11 @@ public: void Initialize(KSession* parent_, std::string&& name_); - constexpr KSession* GetParent() { + KSession* GetParent() { return parent; } - constexpr const KSession* GetParent() const { + const KSession* GetParent() const { return parent; } diff --git a/src/core/hle/kernel/k_session.cpp b/src/core/hle/kernel/k_session.cpp index 5e629d4467..7b0bc177d0 100644 --- a/src/core/hle/kernel/k_session.cpp +++ b/src/core/hle/kernel/k_session.cpp @@ -49,24 +49,30 @@ void KSession::Initialize(KClientPort* port_, const std::string& name_) { } void KSession::Finalize() { - if (port != nullptr) { - port->OnSessionFinalized(); - port->Close(); + if (port == nullptr) { + return; } + + port->OnSessionFinalized(); + port->Close(); } void KSession::OnServerClosed() { - if (GetState() == State::Normal) { - SetState(State::ServerClosed); - client.OnServerClosed(); + if (GetState() != State::Normal) { + return; } + + SetState(State::ServerClosed); + client.OnServerClosed(); } void KSession::OnClientClosed() { - if (GetState() == State::Normal) { - SetState(State::ClientClosed); - server.OnClientClosed(); + if (GetState() != State::Normal) { + return; } + + SetState(State::ClientClosed); + server.OnClientClosed(); } void KSession::PostDestroy(uintptr_t arg) { diff --git a/src/core/hle/kernel/k_session.h b/src/core/hle/kernel/k_session.h index d50e21f3fd..4321b7885f 100644 --- a/src/core/hle/kernel/k_session.h +++ b/src/core/hle/kernel/k_session.h @@ -16,14 +16,6 @@ namespace Kernel { class KSession final : public KAutoObjectWithSlabHeapAndContainer { KERNEL_AUTOOBJECT_TRAITS(KSession, KAutoObject); -private: - enum class State : u8 { - Invalid = 0, - Normal = 1, - ClientClosed = 2, - ServerClosed = 3, - }; - public: explicit KSession(KernelCore& kernel); virtual ~KSession() override; @@ -74,20 +66,28 @@ public: return port; } +private: + enum class State : u8 { + Invalid = 0, + Normal = 1, + ClientClosed = 2, + ServerClosed = 3, + }; + private: void SetState(State state) { atomic_state = static_cast(state); } State GetState() const { - return static_cast(atomic_state.load()); + return static_cast(atomic_state.load(std::memory_order_relaxed)); } private: KServerSession server; KClientSession client; - std::atomic::type> atomic_state{ - static_cast::type>(State::Invalid)}; + std::atomic> atomic_state{ + static_cast>(State::Invalid)}; KClientPort* port{}; KProcess* process{}; bool initialized{};