diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-06-07 01:53:26 +0200 |
---|---|---|
committer | Markus Wick <markus@selfnet.de> | 2021-06-11 17:27:17 +0200 |
commit | ee67460ff0e12a1603431d86fe3919a24b3858fb (patch) | |
tree | a8d0955b2bd1cf69fb54a970d0996c3affcbff62 | |
parent | General: Add settings for fastmem and disabling adress space check. (diff) | |
download | yuzu-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 '')
-rw-r--r-- | src/common/host_memory.cpp | 15 |
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; } } |