瀏覽代碼

fixup! hle: kernel: Migrate KSession, KClientSession, and KServerSession to KAutoObject.

bunnei 5 年之前
父節點
當前提交
f6d45b747e
共有 3 個文件被更改,包括 28 次插入22 次删除
  1. 2 2
      src/core/hle/kernel/k_server_session.h
  2. 15 9
      src/core/hle/kernel/k_session.cpp
  3. 11 11
      src/core/hle/kernel/k_session.h

+ 2 - 2
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;
     }
 

+ 15 - 9
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) {

+ 11 - 11
src/core/hle/kernel/k_session.h

@@ -16,14 +16,6 @@ namespace Kernel {
 class KSession final : public KAutoObjectWithSlabHeapAndContainer<KSession, KAutoObjectWithList> {
     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<u8>(state);
     }
 
     State GetState() const {
-        return static_cast<State>(atomic_state.load());
+        return static_cast<State>(atomic_state.load(std::memory_order_relaxed));
     }
 
 private:
     KServerSession server;
     KClientSession client;
-    std::atomic<std::underlying_type<State>::type> atomic_state{
-        static_cast<std::underlying_type<State>::type>(State::Invalid)};
+    std::atomic<std::underlying_type_t<State>> atomic_state{
+        static_cast<std::underlying_type_t<State>>(State::Invalid)};
     KClientPort* port{};
     KProcess* process{};
     bool initialized{};