diff options
author | gidoly <66776795+gidoly@users.noreply.github.com> | 2022-12-29 09:39:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-29 09:39:42 +0100 |
commit | 10eaf31af373a01c989b4df2d13c2fa770857b3a (patch) | |
tree | e184c5bfa13ee0efa07c8ad1afecb339035bb671 /src/core/hle/kernel/k_shared_memory.cpp | |
parent | Merge pull request #9423 from vonchenplus/vulkan_quad_strip (diff) | |
download | yuzu-10eaf31af373a01c989b4df2d13c2fa770857b3a.tar yuzu-10eaf31af373a01c989b4df2d13c2fa770857b3a.tar.gz yuzu-10eaf31af373a01c989b4df2d13c2fa770857b3a.tar.bz2 yuzu-10eaf31af373a01c989b4df2d13c2fa770857b3a.tar.lz yuzu-10eaf31af373a01c989b4df2d13c2fa770857b3a.tar.xz yuzu-10eaf31af373a01c989b4df2d13c2fa770857b3a.tar.zst yuzu-10eaf31af373a01c989b4df2d13c2fa770857b3a.zip |
Diffstat (limited to 'src/core/hle/kernel/k_shared_memory.cpp')
-rw-r--r-- | src/core/hle/kernel/k_shared_memory.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/core/hle/kernel/k_shared_memory.cpp b/src/core/hle/kernel/k_shared_memory.cpp index 3cf2b5d91..0aa68103c 100644 --- a/src/core/hle/kernel/k_shared_memory.cpp +++ b/src/core/hle/kernel/k_shared_memory.cpp @@ -13,7 +13,10 @@ namespace Kernel { KSharedMemory::KSharedMemory(KernelCore& kernel_) : KAutoObjectWithSlabHeapAndContainer{kernel_} {} -KSharedMemory::~KSharedMemory() = default; + +KSharedMemory::~KSharedMemory() { + kernel.GetSystemResourceLimit()->Release(LimitableResource::PhysicalMemoryMax, size); +} Result KSharedMemory::Initialize(Core::DeviceMemory& device_memory_, KProcess* owner_process_, Svc::MemoryPermission owner_permission_, @@ -46,8 +49,7 @@ Result KSharedMemory::Initialize(Core::DeviceMemory& device_memory_, KProcess* o R_UNLESS(physical_address != 0, ResultOutOfMemory); //! Insert the result into our page group. - page_group.emplace(kernel, &kernel.GetSystemSystemResource().GetBlockInfoManager()); - page_group->AddBlock(physical_address, num_pages); + page_group.emplace(physical_address, num_pages); // Commit our reservation. memory_reservation.Commit(); @@ -60,7 +62,7 @@ Result KSharedMemory::Initialize(Core::DeviceMemory& device_memory_, KProcess* o is_initialized = true; // Clear all pages in the memory. - for (const auto& block : *page_group) { + for (const auto& block : page_group->Nodes()) { std::memset(device_memory_.GetPointer<void>(block.GetAddress()), 0, block.GetSize()); } @@ -69,8 +71,13 @@ Result KSharedMemory::Initialize(Core::DeviceMemory& device_memory_, KProcess* o void KSharedMemory::Finalize() { // Close and finalize the page group. - page_group->Close(); - page_group->Finalize(); + // page_group->Close(); + // page_group->Finalize(); + + //! HACK: Manually close. + for (const auto& block : page_group->Nodes()) { + kernel.MemoryManager().Close(block.GetAddress(), block.GetNumPages()); + } // Release the memory reservation. resource_limit->Release(LimitableResource::PhysicalMemoryMax, size); |