diff options
| author | 2021-02-12 18:21:30 -0800 | |
|---|---|---|
| committer | 2021-02-12 18:21:30 -0800 | |
| commit | c86d770af945888c42e45eee2101ea7e0a39fd68 (patch) | |
| tree | fc563f28673dfe851cfaf665951423e0ad759025 /src/core/hle/kernel/session.cpp | |
| parent | kernel: Unify result codes (#5890) (diff) | |
| parent | kernel: More accurately reserve and release resources (diff) | |
| download | yuzu-c86d770af945888c42e45eee2101ea7e0a39fd68.tar.gz yuzu-c86d770af945888c42e45eee2101ea7e0a39fd68.tar.xz yuzu-c86d770af945888c42e45eee2101ea7e0a39fd68.zip | |
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 @@ | |||
| 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 | ||
| 10 | namespace Kernel { | 11 | namespace Kernel { |
| 11 | 12 | ||
| 12 | Session::Session(KernelCore& kernel) : KSynchronizationObject{kernel} {} | 13 | Session::Session(KernelCore& kernel) : KSynchronizationObject{kernel} {} |
| 13 | Session::~Session() = default; | 14 | Session::~Session() { |
| 15 | // Release reserved resource when the Session pair was created. | ||
| 16 | kernel.GetSystemResourceLimit()->Release(LimitableResource::Sessions, 1); | ||
| 17 | } | ||
| 14 | 18 | ||
| 15 | Session::SessionPair Session::Create(KernelCore& kernel, std::string name) { | 19 | Session::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 | ||