yuzu/src/core/hle/kernel/session.cpp

42 lines
1.5 KiB
C++
Raw Normal View History

2020-12-28 19:15:37 +04:00
// Copyright 2019 yuzu emulator team
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include "common/assert.h"
#include "core/hle/kernel/client_session.h"
2021-02-07 02:05:49 +04:00
#include "core/hle/kernel/k_scoped_resource_reservation.h"
2020-12-28 19:15:37 +04:00
#include "core/hle/kernel/server_session.h"
#include "core/hle/kernel/session.h"
namespace Kernel {
2020-12-31 14:03:11 +04:00
Session::Session(KernelCore& kernel) : KSynchronizationObject{kernel} {}
2021-02-07 02:05:49 +04:00
Session::~Session() {
// Release reserved resource when the Session pair was created.
kernel.GetSystemResourceLimit()->Release(LimitableResource::Sessions, 1);
}
2020-12-28 19:15:37 +04:00
Session::SessionPair Session::Create(KernelCore& kernel, std::string name) {
2021-02-07 02:05:49 +04:00
// Reserve a new session from the resource limit.
KScopedResourceReservation session_reservation(kernel.GetSystemResourceLimit(),
LimitableResource::Sessions);
ASSERT(session_reservation.Succeeded());
2020-12-28 19:15:37 +04:00
auto session{std::make_shared<Session>(kernel)};
auto client_session{Kernel::ClientSession::Create(kernel, session, name + "_Client").Unwrap()};
auto server_session{Kernel::ServerSession::Create(kernel, session, name + "_Server").Unwrap()};
session->name = std::move(name);
session->client = client_session;
session->server = server_session;
2021-02-07 02:05:49 +04:00
session_reservation.Commit();
2020-12-28 19:15:37 +04:00
return std::make_pair(std::move(client_session), std::move(server_session));
}
bool Session::IsSignaled() const {
UNIMPLEMENTED();
return true;
}
} // namespace Kernel