diff options
author | Narr the Reg <juangerman-13@hotmail.com> | 2024-02-12 03:58:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-12 03:58:28 +0100 |
commit | 2ff45cd0da941dce2564f5c18c580d0283da27bf (patch) | |
tree | 81fea8c23f9afa39c167288e03ff57eb25413ee4 /src/core/hle/service/nvdrv/core/container.cpp | |
parent | Merge pull request #12991 from german77/news2 (diff) | |
parent | am: use applet program loading for tested versions (diff) | |
download | yuzu-2ff45cd0da941dce2564f5c18c580d0283da27bf.tar yuzu-2ff45cd0da941dce2564f5c18c580d0283da27bf.tar.gz yuzu-2ff45cd0da941dce2564f5c18c580d0283da27bf.tar.bz2 yuzu-2ff45cd0da941dce2564f5c18c580d0283da27bf.tar.lz yuzu-2ff45cd0da941dce2564f5c18c580d0283da27bf.tar.xz yuzu-2ff45cd0da941dce2564f5c18c580d0283da27bf.tar.zst yuzu-2ff45cd0da941dce2564f5c18c580d0283da27bf.zip |
Diffstat (limited to 'src/core/hle/service/nvdrv/core/container.cpp')
-rw-r--r-- | src/core/hle/service/nvdrv/core/container.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/core/hle/service/nvdrv/core/container.cpp b/src/core/hle/service/nvdrv/core/container.cpp index e89cca6f2..9edce03f6 100644 --- a/src/core/hle/service/nvdrv/core/container.cpp +++ b/src/core/hle/service/nvdrv/core/container.cpp @@ -49,6 +49,7 @@ SessionId Container::OpenSession(Kernel::KProcess* process) { continue; } if (session.process == process) { + session.ref_count++; return session.id; } } @@ -66,6 +67,7 @@ SessionId Container::OpenSession(Kernel::KProcess* process) { } auto& session = impl->sessions[new_id]; session.is_active = true; + session.ref_count = 1; // Optimization if (process->IsApplication()) { auto& page_table = process->GetPageTable().GetBasePageTable(); @@ -114,8 +116,11 @@ SessionId Container::OpenSession(Kernel::KProcess* process) { void Container::CloseSession(SessionId session_id) { std::scoped_lock lk(impl->session_guard); - impl->file.UnmapAllHandles(session_id); auto& session = impl->sessions[session_id.id]; + if (--session.ref_count > 0) { + return; + } + impl->file.UnmapAllHandles(session_id); auto& smmu = impl->host1x.MemoryManager(); if (session.has_preallocated_area) { const DAddr region_start = session.mapper->GetRegionStart(); |