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
This commit is contained in:
zhaowenlan1779 2018-08-25 01:31:20 +08:00 committed by Tobias
parent 47025552c7
commit 75927ee462
3 changed files with 19 additions and 7 deletions

View File

@ -13,8 +13,8 @@
namespace Kernel { namespace Kernel {
ClientPort::ClientPort() {} ClientPort::ClientPort() = default;
ClientPort::~ClientPort() {} ClientPort::~ClientPort() = default;
ResultVal<SharedPtr<ClientSession>> ClientPort::Connect() { ResultVal<SharedPtr<ClientSession>> ClientPort::Connect() {
// Note: Threads do not wait for the server endpoint to call // Note: Threads do not wait for the server endpoint to call
@ -39,4 +39,10 @@ ResultVal<SharedPtr<ClientSession>> ClientPort::Connect() {
return MakeResult(std::get<SharedPtr<ClientSession>>(sessions)); return MakeResult(std::get<SharedPtr<ClientSession>>(sessions));
} }
void ClientPort::ConnectionClosed() {
ASSERT(active_sessions > 0);
--active_sessions;
}
} // namespace Kernel } // namespace Kernel

View File

@ -37,14 +37,20 @@ public:
*/ */
ResultVal<SharedPtr<ClientSession>> Connect(); ResultVal<SharedPtr<ClientSession>> Connect();
SharedPtr<ServerPort> server_port; ///< ServerPort associated with this client port. /**
u32 max_sessions; ///< Maximum number of simultaneous sessions the port can have * Signifies that a previously active connection has been closed,
u32 active_sessions; ///< Number of currently open sessions to this port * decreasing the total number of active connections to this port.
std::string name; ///< Name of client port (optional) */
void ConnectionClosed();
private: private:
ClientPort(); ClientPort();
~ClientPort() override; ~ClientPort() override;
SharedPtr<ServerPort> 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 } // namespace Kernel

View File

@ -20,7 +20,7 @@ ServerSession::~ServerSession() {
// Decrease the port's connection count. // Decrease the port's connection count.
if (parent->port) if (parent->port)
parent->port->active_sessions--; parent->port->ConnectionClosed();
// TODO(Subv): Wake up all the ClientSession's waiting threads and set // TODO(Subv): Wake up all the ClientSession's waiting threads and set
// the SendSyncRequest result to 0xC920181A. // the SendSyncRequest result to 0xC920181A.