From 8feeb81af27ea8fed6888e26c1024be3b3231d48 Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 20 Jun 2017 17:33:28 -0500 Subject: Kernel/ServerSession: Keep track of which threads have issued sync requests. --- src/core/hle/kernel/client_session.cpp | 2 +- 1 file changed, 1 insertion(+), 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 fef97af1f..78a64d105 100644 --- a/src/core/hle/kernel/client_session.cpp +++ b/src/core/hle/kernel/client_session.cpp @@ -39,7 +39,7 @@ ResultCode ClientSession::SendSyncRequest() { return ERR_SESSION_CLOSED_BY_REMOTE; // Signal the server session that new data is available - return server->HandleSyncRequest(); + return server->HandleSyncRequest(GetCurrentThread()); } } // namespace -- cgit v1.2.3 From c3c9175a1c14cd82ea9ee9147281802f5b94013e Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 25 Jun 2017 20:14:04 -0500 Subject: Kernel/Sessions: Clean up the list of pending request threads of a session when the client endpoint is closed. --- src/core/hle/kernel/client_session.cpp | 5 +++++ 1 file changed, 5 insertions(+) (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 78a64d105..e9cf05747 100644 --- a/src/core/hle/kernel/client_session.cpp +++ b/src/core/hle/kernel/client_session.cpp @@ -27,6 +27,11 @@ ClientSession::~ClientSession() { // TODO(Subv): Force a wake up of all the ServerSession's waiting threads and set // their WaitSynchronization result to 0xC920181A. + + // Clean up the list of client threads with pending requests, they are unneeded now that the + // client endpoint is closed. + server->pending_requesting_threads.clear(); + server->currently_handling = nullptr; } parent->client = nullptr; -- cgit v1.2.3 From b53fa9514fd8d6aa9a93629ab5512da7706c536d Mon Sep 17 00:00:00 2001 From: Subv Date: Thu, 29 Jun 2017 12:30:34 -0500 Subject: Kernel/SVC: Pass the current thread as a parameter to ClientSession::SendSyncRequest. --- src/core/hle/kernel/client_session.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 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 e9cf05747..646a5cc64 100644 --- a/src/core/hle/kernel/client_session.cpp +++ b/src/core/hle/kernel/client_session.cpp @@ -9,6 +9,7 @@ #include "core/hle/kernel/hle_ipc.h" #include "core/hle/kernel/server_session.h" #include "core/hle/kernel/session.h" +#include "core/hle/kernel/thread.h" namespace Kernel { @@ -37,14 +38,14 @@ ClientSession::~ClientSession() { parent->client = nullptr; } -ResultCode ClientSession::SendSyncRequest() { +ResultCode ClientSession::SendSyncRequest(SharedPtr thread) { // Keep ServerSession alive until we're done working with it. SharedPtr server = parent->server; if (server == nullptr) return ERR_SESSION_CLOSED_BY_REMOTE; // Signal the server session that new data is available - return server->HandleSyncRequest(GetCurrentThread()); + return server->HandleSyncRequest(std::move(thread)); } } // namespace -- cgit v1.2.3