summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/server_session.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-12-15 09:41:48 +0100
committerbunnei <bunneidev@gmail.com>2020-12-29 10:12:39 +0100
commitdfdac7d38af170683812f3b474ef9d686dfa9ef8 (patch)
treed72ff3fb593e6d42984b4d89863ae22cab3d77f5 /src/core/hle/kernel/server_session.cpp
parenthle: kernel: service_thread: Add thread name and take weak_ptr of ServerSession. (diff)
downloadyuzu-dfdac7d38af170683812f3b474ef9d686dfa9ef8.tar
yuzu-dfdac7d38af170683812f3b474ef9d686dfa9ef8.tar.gz
yuzu-dfdac7d38af170683812f3b474ef9d686dfa9ef8.tar.bz2
yuzu-dfdac7d38af170683812f3b474ef9d686dfa9ef8.tar.lz
yuzu-dfdac7d38af170683812f3b474ef9d686dfa9ef8.tar.xz
yuzu-dfdac7d38af170683812f3b474ef9d686dfa9ef8.tar.zst
yuzu-dfdac7d38af170683812f3b474ef9d686dfa9ef8.zip
Diffstat (limited to 'src/core/hle/kernel/server_session.cpp')
-rw-r--r--src/core/hle/kernel/server_session.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/core/hle/kernel/server_session.cpp b/src/core/hle/kernel/server_session.cpp
index 947f4a133..b40fe3916 100644
--- a/src/core/hle/kernel/server_session.cpp
+++ b/src/core/hle/kernel/server_session.cpp
@@ -25,7 +25,10 @@
namespace Kernel {
ServerSession::ServerSession(KernelCore& kernel) : SynchronizationObject{kernel} {}
-ServerSession::~ServerSession() = default;
+
+ServerSession::~ServerSession() {
+ kernel.ReleaseServiceThread(service_thread);
+}
ResultVal<std::shared_ptr<ServerSession>> ServerSession::Create(KernelCore& kernel,
std::shared_ptr<Session> parent,
@@ -34,7 +37,7 @@ ResultVal<std::shared_ptr<ServerSession>> ServerSession::Create(KernelCore& kern
session->name = std::move(name);
session->parent = std::move(parent);
- session->service_thread = std::make_unique<ServiceThread>(kernel, 1, session->name);
+ session->service_thread = kernel.CreateServiceThread(session->name);
return MakeResult(std::move(session));
}
@@ -139,7 +142,11 @@ ResultCode ServerSession::QueueSyncRequest(std::shared_ptr<Thread> thread,
std::make_shared<HLERequestContext>(kernel, memory, SharedFrom(this), std::move(thread));
context->PopulateFromIncomingCommandBuffer(kernel.CurrentProcess()->GetHandleTable(), cmd_buf);
- service_thread->QueueSyncRequest(*this, std::move(context));
+
+ if (auto strong_ptr = service_thread.lock()) {
+ strong_ptr->QueueSyncRequest(*this, std::move(context));
+ return RESULT_SUCCESS;
+ }
return RESULT_SUCCESS;
}