From b780e2b755923f18d54b4877b0d8e3ab5aeacb73 Mon Sep 17 00:00:00 2001 From: TheASVigilante <65920585+TheASVigilante@users.noreply.github.com> Date: Thu, 9 Feb 2023 14:51:55 +0100 Subject: [PATCH] Deallocate Unmapped memory pages Reduces memory usage buildup over time, may affect performance. --- app/src/main/cpp/skyline/kernel/svc.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/cpp/skyline/kernel/svc.cpp b/app/src/main/cpp/skyline/kernel/svc.cpp index 337c5014..3f5c14d1 100644 --- a/app/src/main/cpp/skyline/kernel/svc.cpp +++ b/app/src/main/cpp/skyline/kernel/svc.cpp @@ -176,6 +176,7 @@ namespace skyline::kernel::svc { if (!sourceObject) throw exception("svcUnmapMemory: Cannot find source memory object in handle table for address 0x{:X}", source); + state.process->memory.FreeMemory(sourceChunk.value().memory->guest); state.process->CloseHandle(sourceObject->handle); Logger::Debug("Unmapped range 0x{:X} - 0x{:X} to 0x{:X} - 0x{:X} (Size: 0x{:X} bytes)", source, source + size, destination, destination + size, size); @@ -1082,8 +1083,9 @@ namespace skyline::kernel::svc { if (memory->memoryState == memory::states::Heap) { if (memory->guest.data() >= pointer) { if (memory->guest.size() <= size) { - memory->Resize(0); + state.process->memory.FreeMemory(memory->guest); state.process->CloseHandle(memory->handle); + delete memory; } else { memory->Remap(span{pointer + size, static_cast((pointer + memory->guest.size() - memory->guest.data())) - size}); }