summaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-06-07 01:53:26 +0200
committerMarkus Wick <markus@selfnet.de>2021-06-11 17:27:17 +0200
commitee67460ff0e12a1603431d86fe3919a24b3858fb (patch)
treea8d0955b2bd1cf69fb54a970d0996c3affcbff62 /src/common
parentGeneral: Add settings for fastmem and disabling adress space check. (diff)
downloadyuzu-ee67460ff0e12a1603431d86fe3919a24b3858fb.tar
yuzu-ee67460ff0e12a1603431d86fe3919a24b3858fb.tar.gz
yuzu-ee67460ff0e12a1603431d86fe3919a24b3858fb.tar.bz2
yuzu-ee67460ff0e12a1603431d86fe3919a24b3858fb.tar.lz
yuzu-ee67460ff0e12a1603431d86fe3919a24b3858fb.tar.xz
yuzu-ee67460ff0e12a1603431d86fe3919a24b3858fb.tar.zst
yuzu-ee67460ff0e12a1603431d86fe3919a24b3858fb.zip
Diffstat (limited to 'src/common')
-rw-r--r--src/common/host_memory.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp
index 8a328f916..c6d65aab9 100644
--- a/src/common/host_memory.cpp
+++ b/src/common/host_memory.cpp
@@ -110,9 +110,18 @@ public:
} else {
UNIMPLEMENTED_MSG("Protection flag combination read={} write={}", read, write);
}
- DWORD old_flags{};
- if (!VirtualProtect(virtual_base + virtual_offset, length, new_flags, &old_flags)) {
- LOG_CRITICAL(HW_Memory, "Failed to change virtual memory protect rules");
+ const size_t virtual_end = virtual_offset + length;
+
+ std::lock_guard lock{placeholder_mutex};
+ auto [it, end] = placeholders.equal_range({virtual_offset, virtual_end});
+ while (it != end) {
+ const size_t offset = std::max(it->lower(), virtual_offset);
+ const size_t protect_length = std::min(it->upper(), virtual_end) - offset;
+ DWORD old_flags{};
+ if (!VirtualProtect(virtual_base + offset, protect_length, new_flags, &old_flags)) {
+ LOG_CRITICAL(HW_Memory, "Failed to change virtual memory protect rules");
+ }
+ ++it;
}
}