diff options
| author | bunnei <bunneidev@gmail.com> | 2021-02-12 18:21:30 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-12 18:21:30 -0800 |
| commit | c86d770af945888c42e45eee2101ea7e0a39fd68 (patch) | |
| tree | fc563f28673dfe851cfaf665951423e0ad759025 /src/core/hle/kernel/session.cpp | |
| parent | 37939482fb93d2155d8625596f2b1145d4f6e8e3 (diff) | |
| parent | ec9b6641b12aa04ae3d7782b0423037dbc1400ac (diff) | |
Merge pull request #5877 from ameerj/res-limit-usage
kernel: More accurately utilize resource_limit
Diffstat (limited to 'src/core/hle/kernel/session.cpp')
| -rw-r--r-- | src/core/hle/kernel/session.cpp | 11 |
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 @@ #include "common/assert.h" #include "core/hle/kernel/client_session.h" +#include "core/hle/kernel/k_scoped_resource_reservation.h" #include "core/hle/kernel/server_session.h" #include "core/hle/kernel/session.h" namespace Kernel { Session::Session(KernelCore& kernel) : KSynchronizationObject{kernel} {} -Session::~Session() = default; +Session::~Session() { + // Release reserved resource when the Session pair was created. + kernel.GetSystemResourceLimit()->Release(LimitableResource::Sessions, 1); +} Session::SessionPair Session::Create(KernelCore& kernel, std::string name) { + // Reserve a new session from the resource limit. + KScopedResourceReservation session_reservation(kernel.GetSystemResourceLimit(), + LimitableResource::Sessions); + ASSERT(session_reservation.Succeeded()); 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()}; @@ -21,6 +29,7 @@ Session::SessionPair Session::Create(KernelCore& kernel, std::string name) { session->client = client_session; session->server = server_session; + session_reservation.Commit(); return std::make_pair(std::move(client_session), std::move(server_session)); } |
