diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2023-01-04 03:40:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-04 03:40:57 +0100 |
commit | bbeb6e460cf1fd8f796978980e745410bc77ce08 (patch) | |
tree | f74e52f633f8911929cf9f394b7a7bd1202f81c5 /src/core/hle/kernel/k_shared_memory.cpp | |
parent | Merge pull request #9547 from MonsterDruide1/tas-doesnt-flap (diff) | |
parent | Revert "k_page_group: synchronize" (diff) | |
download | yuzu-bbeb6e460cf1fd8f796978980e745410bc77ce08.tar yuzu-bbeb6e460cf1fd8f796978980e745410bc77ce08.tar.gz yuzu-bbeb6e460cf1fd8f796978980e745410bc77ce08.tar.bz2 yuzu-bbeb6e460cf1fd8f796978980e745410bc77ce08.tar.lz yuzu-bbeb6e460cf1fd8f796978980e745410bc77ce08.tar.xz yuzu-bbeb6e460cf1fd8f796978980e745410bc77ce08.tar.zst yuzu-bbeb6e460cf1fd8f796978980e745410bc77ce08.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); |