diff options
author | bunnei <bunneidev@gmail.com> | 2019-11-26 00:28:48 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2019-11-28 18:01:53 +0100 |
commit | c3d3b173d39b7c12fa9b3d5d34040e9377f2888e (patch) | |
tree | 61ff05239fe2b3d08bcf775f1528263cffc9aff4 /src/core/hle/kernel/client_session.cpp | |
parent | Merge pull request #3169 from lioncash/memory (diff) | |
download | yuzu-c3d3b173d39b7c12fa9b3d5d34040e9377f2888e.tar yuzu-c3d3b173d39b7c12fa9b3d5d34040e9377f2888e.tar.gz yuzu-c3d3b173d39b7c12fa9b3d5d34040e9377f2888e.tar.bz2 yuzu-c3d3b173d39b7c12fa9b3d5d34040e9377f2888e.tar.lz yuzu-c3d3b173d39b7c12fa9b3d5d34040e9377f2888e.tar.xz yuzu-c3d3b173d39b7c12fa9b3d5d34040e9377f2888e.tar.zst yuzu-c3d3b173d39b7c12fa9b3d5d34040e9377f2888e.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/client_session.cpp | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/src/core/hle/kernel/client_session.cpp b/src/core/hle/kernel/client_session.cpp index 9849dbe91..4669a14ad 100644 --- a/src/core/hle/kernel/client_session.cpp +++ b/src/core/hle/kernel/client_session.cpp @@ -1,4 +1,4 @@ -// Copyright 2016 Citra Emulator Project +// Copyright 2019 yuzu emulator team // Licensed under GPLv2 or any later version // Refer to the license.txt file included. @@ -12,22 +12,44 @@ namespace Kernel { -ClientSession::ClientSession(KernelCore& kernel) : Object{kernel} {} +ClientSession::ClientSession(KernelCore& kernel) : WaitObject{kernel} {} + ClientSession::~ClientSession() { // This destructor will be called automatically when the last ClientSession handle is closed by // the emulated application. - if (auto server = parent->server.lock()) { - server->ClientDisconnected(); + if (parent->Server()) { + parent->Server()->ClientDisconnected(); } } -ResultCode ClientSession::SendSyncRequest(Thread* thread, Memory::Memory& memory) { - // Signal the server session that new data is available - if (auto server = parent->server.lock()) { - return server->HandleSyncRequest(SharedFrom(thread), memory); +bool ClientSession::ShouldWait(const Thread* thread) const { + UNIMPLEMENTED(); + return {}; +} + +void ClientSession::Acquire(Thread* thread) { + UNIMPLEMENTED(); +} + +ResultVal<std::shared_ptr<ClientSession>> ClientSession::Create(KernelCore& kernel, + std::shared_ptr<Session> parent, + std::string name) { + std::shared_ptr<ClientSession> client_session{std::make_shared<ClientSession>(kernel)}; + + client_session->name = std::move(name); + client_session->parent = std::move(parent); + + return MakeResult(std::move(client_session)); +} + +ResultCode ClientSession::SendSyncRequest(std::shared_ptr<Thread> thread, Memory::Memory& memory) { + // Keep ServerSession alive until we're done working with it. + if (!parent->Server()) { + return ERR_SESSION_CLOSED_BY_REMOTE; } - return ERR_SESSION_CLOSED_BY_REMOTE; + // Signal the server session that new data is available + return parent->Server()->HandleSyncRequest(std::move(thread), memory); } } // namespace Kernel |