From 97daee836a05c18da655bf7f19d4b39bb024bfb8 Mon Sep 17 00:00:00 2001 From: Stephen Miller <56742918+StevenMiller123@users.noreply.github.com> Date: Tue, 15 Jul 2025 06:11:56 -0500 Subject: [PATCH] Core: Fix read-only file unmaps on Windows (#3246) * Fix read-only file unmaps Fixes Genshin Impact (CUSA23681) * Slight cleanup Don't need `post_merge_it` anymore. --- src/core/memory.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 3d9bf58a7..12099ea73 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -537,6 +537,7 @@ u64 MemoryManager::UnmapBytesFromEntry(VAddr virtual_addr, VirtualMemoryArea vma vma_base_size - start_in_vma < size ? vma_base_size - start_in_vma : size; const bool has_backing = type == VMAType::Direct || type == VMAType::File; const auto prot = vma_base.prot; + const bool readonly_file = prot == MemoryProt::CpuRead && type == VMAType::File; if (type == VMAType::Free) { return adjusted_size; @@ -554,9 +555,8 @@ u64 MemoryManager::UnmapBytesFromEntry(VAddr virtual_addr, VirtualMemoryArea vma vma.phys_base = 0; vma.disallow_merge = false; vma.name = ""; - const auto post_merge_it = MergeAdjacent(vma_map, new_it); - auto& post_merge_vma = post_merge_it->second; - bool readonly_file = post_merge_vma.prot == MemoryProt::CpuRead && type == VMAType::File; + MergeAdjacent(vma_map, new_it); + if (type != VMAType::Reserved && type != VMAType::PoolReserved) { // If this mapping has GPU access, unmap from GPU. if (IsValidGpuMapping(virtual_addr, size)) {