From ddfabf31330c0c8e0558a714b6d7e1f1948b73ed Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 4 Jan 2017 23:23:17 -0500 Subject: Kernel: Use a Session object to keep track of the status of a Client/Server session pair. Reduce the associated port's connection count when a ServerSession is destroyed. --- src/core/hle/kernel/client_session.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src/core/hle/kernel/client_session.cpp') diff --git a/src/core/hle/kernel/client_session.cpp b/src/core/hle/kernel/client_session.cpp index 0331386ec..c2f48176e 100644 --- a/src/core/hle/kernel/client_session.cpp +++ b/src/core/hle/kernel/client_session.cpp @@ -14,27 +14,33 @@ ClientSession::~ClientSession() { // This destructor will be called automatically when the last ClientSession handle is closed by // the emulated application. - if (server_session->hle_handler) - server_session->hle_handler->ClientDisconnected(server_session); + if (parent->server) { + if (parent->server->hle_handler) + parent->server->hle_handler->ClientDisconnected(parent->server); - // TODO(Subv): If the session is still open, set the connection status to 2 (Closed by client), - // wake up all the ServerSession's waiting threads and set the WaitSynchronization result to - // 0xC920181A. + // TODO(Subv): Force a wake up of all the ServerSession's waiting threads and set + // their WaitSynchronization result to 0xC920181A. + } + + parent->client = nullptr; } -ResultVal> ClientSession::Create(ServerSession* server_session, - std::string name) { +ResultVal> ClientSession::Create(std::string name) { SharedPtr client_session(new ClientSession); client_session->name = std::move(name); - client_session->server_session = server_session; + client_session->parent = nullptr; client_session->session_status = SessionStatus::Open; return MakeResult>(std::move(client_session)); } ResultCode ClientSession::SendSyncRequest() { // Signal the server session that new data is available - return server_session->HandleSyncRequest(); + if (parent->server) + return parent->server->HandleSyncRequest(); + + return ResultCode(ErrorDescription::SessionClosedByRemote, ErrorModule::OS, + ErrorSummary::Canceled, ErrorLevel::Status); } } // namespace -- cgit v1.2.3 From ce5bc477ca0cd59df4922c1c6cd245db365dc7bc Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 4 Jan 2017 23:24:06 -0500 Subject: Kernel: Remove a now unused enum and variable regarding a session's status. --- src/core/hle/kernel/client_session.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/core/hle/kernel/client_session.cpp') diff --git a/src/core/hle/kernel/client_session.cpp b/src/core/hle/kernel/client_session.cpp index c2f48176e..6737b204b 100644 --- a/src/core/hle/kernel/client_session.cpp +++ b/src/core/hle/kernel/client_session.cpp @@ -30,7 +30,6 @@ ResultVal> ClientSession::Create(std::string name) { client_session->name = std::move(name); client_session->parent = nullptr; - client_session->session_status = SessionStatus::Open; return MakeResult>(std::move(client_session)); } -- cgit v1.2.3 From 37347bfa380464a1ee1236d2a35f1ec1b697e4b6 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 21 May 2017 18:52:42 -0500 Subject: Kernel/Sessions: Remove the ClientSession::Create function. It is not meant to be used by anything other than CreateSessionPair. --- src/core/hle/kernel/client_session.cpp | 8 -------- 1 file changed, 8 deletions(-) (limited to 'src/core/hle/kernel/client_session.cpp') diff --git a/src/core/hle/kernel/client_session.cpp b/src/core/hle/kernel/client_session.cpp index 6737b204b..e297b7464 100644 --- a/src/core/hle/kernel/client_session.cpp +++ b/src/core/hle/kernel/client_session.cpp @@ -25,14 +25,6 @@ ClientSession::~ClientSession() { parent->client = nullptr; } -ResultVal> ClientSession::Create(std::string name) { - SharedPtr client_session(new ClientSession); - - client_session->name = std::move(name); - client_session->parent = nullptr; - return MakeResult>(std::move(client_session)); -} - ResultCode ClientSession::SendSyncRequest() { // Signal the server session that new data is available if (parent->server) -- cgit v1.2.3