diff options
author | bunnei <bunneidev@gmail.com> | 2020-12-15 09:41:48 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2020-12-29 10:12:39 +0100 |
commit | dfdac7d38af170683812f3b474ef9d686dfa9ef8 (patch) | |
tree | d72ff3fb593e6d42984b4d89863ae22cab3d77f5 /src/core/hle/kernel/server_session.cpp | |
parent | hle: kernel: service_thread: Add thread name and take weak_ptr of ServerSession. (diff) | |
download | yuzu-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.cpp | 13 |
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; } |