summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/session.cpp
diff options
context:
space:
mode:
authorGravatar ameerj2021-02-12 19:05:24 -0500
committerGravatar ameerj2021-02-12 19:05:24 -0500
commitec9b6641b12aa04ae3d7782b0423037dbc1400ac (patch)
treefc563f28673dfe851cfaf665951423e0ad759025 /src/core/hle/kernel/session.cpp
parentkernel: KScopedReservation implementation (diff)
downloadyuzu-ec9b6641b12aa04ae3d7782b0423037dbc1400ac.tar.gz
yuzu-ec9b6641b12aa04ae3d7782b0423037dbc1400ac.tar.xz
yuzu-ec9b6641b12aa04ae3d7782b0423037dbc1400ac.zip
kernel: More accurately reserve and release resources
Diffstat (limited to 'src/core/hle/kernel/session.cpp')
-rw-r--r--src/core/hle/kernel/session.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/core/hle/kernel/session.cpp b/src/core/hle/kernel/session.cpp
index 75304b961..8830d4e91 100644
--- a/src/core/hle/kernel/session.cpp
+++ b/src/core/hle/kernel/session.cpp
@@ -4,15 +4,23 @@
4 4
5#include "common/assert.h" 5#include "common/assert.h"
6#include "core/hle/kernel/client_session.h" 6#include "core/hle/kernel/client_session.h"
7#include "core/hle/kernel/k_scoped_resource_reservation.h"
7#include "core/hle/kernel/server_session.h" 8#include "core/hle/kernel/server_session.h"
8#include "core/hle/kernel/session.h" 9#include "core/hle/kernel/session.h"
9 10
10namespace Kernel { 11namespace Kernel {
11 12
12Session::Session(KernelCore& kernel) : KSynchronizationObject{kernel} {} 13Session::Session(KernelCore& kernel) : KSynchronizationObject{kernel} {}
13Session::~Session() = default; 14Session::~Session() {
15 // Release reserved resource when the Session pair was created.
16 kernel.GetSystemResourceLimit()->Release(LimitableResource::Sessions, 1);
17}
14 18
15Session::SessionPair Session::Create(KernelCore& kernel, std::string name) { 19Session::SessionPair Session::Create(KernelCore& kernel, std::string name) {
20 // Reserve a new session from the resource limit.
21 KScopedResourceReservation session_reservation(kernel.GetSystemResourceLimit(),
22 LimitableResource::Sessions);
23 ASSERT(session_reservation.Succeeded());
16 auto session{std::make_shared<Session>(kernel)}; 24 auto session{std::make_shared<Session>(kernel)};
17 auto client_session{Kernel::ClientSession::Create(kernel, session, name + "_Client").Unwrap()}; 25 auto client_session{Kernel::ClientSession::Create(kernel, session, name + "_Client").Unwrap()};
18 auto server_session{Kernel::ServerSession::Create(kernel, session, name + "_Server").Unwrap()}; 26 auto server_session{Kernel::ServerSession::Create(kernel, session, name + "_Server").Unwrap()};
@@ -21,6 +29,7 @@ Session::SessionPair Session::Create(KernelCore& kernel, std::string name) {
21 session->client = client_session; 29 session->client = client_session;
22 session->server = server_session; 30 session->server = server_session;
23 31
32 session_reservation.Commit();
24 return std::make_pair(std::move(client_session), std::move(server_session)); 33 return std::make_pair(std::move(client_session), std::move(server_session));
25} 34}
26 35