summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_shared_memory.cpp
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-01-04 03:40:57 +0100
committerGitHub <noreply@github.com>2023-01-04 03:40:57 +0100
commitbbeb6e460cf1fd8f796978980e745410bc77ce08 (patch)
treef74e52f633f8911929cf9f394b7a7bd1202f81c5 /src/core/hle/kernel/k_shared_memory.cpp
parentMerge pull request #9547 from MonsterDruide1/tas-doesnt-flap (diff)
parentRevert "k_page_group: synchronize" (diff)
downloadyuzu-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.cpp19
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);