From 75927ee4620b8fc3d3177b58309c0aff64ff9eda Mon Sep 17 00:00:00 2001 From: zhaowenlan1779 Date: Sat, 25 Aug 2018 01:31:20 +0800 Subject: [PATCH] Port "client_port: Make all data members private" from yuzu (#4064) * client_port: Make all data members private These members don't need to be entirely exposed, we can instead expose an API to operate on them without directly needing to mutate them We can also guard against overflow/API misuse this way as well, given active_sessions is an unsigned value. * make the condition an assert --- src/core/hle/kernel/client_port.cpp | 10 ++++++++-- src/core/hle/kernel/client_port.h | 14 ++++++++++---- src/core/hle/kernel/server_session.cpp | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/core/hle/kernel/client_port.cpp b/src/core/hle/kernel/client_port.cpp index fb2b6f7a3..f3aa4c57b 100644 --- a/src/core/hle/kernel/client_port.cpp +++ b/src/core/hle/kernel/client_port.cpp @@ -13,8 +13,8 @@ namespace Kernel { -ClientPort::ClientPort() {} -ClientPort::~ClientPort() {} +ClientPort::ClientPort() = default; +ClientPort::~ClientPort() = default; ResultVal> ClientPort::Connect() { // Note: Threads do not wait for the server endpoint to call @@ -39,4 +39,10 @@ ResultVal> ClientPort::Connect() { return MakeResult(std::get>(sessions)); } +void ClientPort::ConnectionClosed() { + ASSERT(active_sessions > 0); + + --active_sessions; +} + } // namespace Kernel diff --git a/src/core/hle/kernel/client_port.h b/src/core/hle/kernel/client_port.h index a829aeb6d..f0729616d 100644 --- a/src/core/hle/kernel/client_port.h +++ b/src/core/hle/kernel/client_port.h @@ -37,14 +37,20 @@ public: */ ResultVal> Connect(); - SharedPtr server_port; ///< ServerPort associated with this client port. - u32 max_sessions; ///< Maximum number of simultaneous sessions the port can have - u32 active_sessions; ///< Number of currently open sessions to this port - std::string name; ///< Name of client port (optional) + /** + * Signifies that a previously active connection has been closed, + * decreasing the total number of active connections to this port. + */ + void ConnectionClosed(); private: ClientPort(); ~ClientPort() override; + + SharedPtr server_port; ///< ServerPort associated with this client port. + u32 max_sessions = 0; ///< Maximum number of simultaneous sessions the port can have + u32 active_sessions = 0; ///< Number of currently open sessions to this port + std::string name; ///< Name of client port (optional) }; } // namespace Kernel diff --git a/src/core/hle/kernel/server_session.cpp b/src/core/hle/kernel/server_session.cpp index 5b61b52cb..b67de4540 100644 --- a/src/core/hle/kernel/server_session.cpp +++ b/src/core/hle/kernel/server_session.cpp @@ -20,7 +20,7 @@ ServerSession::~ServerSession() { // Decrease the port's connection count. if (parent->port) - parent->port->active_sessions--; + parent->port->ConnectionClosed(); // TODO(Subv): Wake up all the ClientSession's waiting threads and set // the SendSyncRequest result to 0xC920181A.