diff options
| author | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-11-01 16:21:59 -0500 |
|---|---|---|
| committer | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-11-01 16:21:59 -0500 |
| commit | 350c64706510b610bef4f925fe64c3d40f4fb86a (patch) | |
| tree | d2ddc7de23bb3bb47d5b1fd94576672d1dd851c6 /src/common/sparse_large_vector.cpp | |
| parent | a41d11108b6478ad862fc7fcac36ab51c83b8602 (diff) | |
| parent | b2b5bceb51356d190969de53b1984e204ab77dc5 (diff) | |
Merge remote-tracking branch 'origin/test/linux-all-prs' into merge/nx2-experimental-1101
# Conflicts:
# src/common/host_memory.h
# src/core/hle/service/service.cpp
Diffstat (limited to 'src/common/sparse_large_vector.cpp')
| -rw-r--r-- | src/common/sparse_large_vector.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/common/sparse_large_vector.cpp b/src/common/sparse_large_vector.cpp index b96340999d..34aba73d78 100644 --- a/src/common/sparse_large_vector.cpp +++ b/src/common/sparse_large_vector.cpp @@ -39,12 +39,12 @@ static LONG WINAPI FakePageFaultHandler(PEXCEPTION_POINTERS info) { std::lock_guard lock(vector_regions_mutex); for (auto region: vector_regions) { auto addr_shifted = exception_addr >> HostPageBits; - if (region.first <= addr_shifted && addr_shifted <= region.second) { + if (region.first <= addr_shifted && addr_shifted < region.second) { addr = addr_shifted; } // Page-boundary accesses - if (auto addr_ = (exception_addr + 0x40) >> HostPageBits; addr_ != addr_shifted && region.first <= addr_ && addr_ <= region.second) { + if (auto addr_ = (exception_addr + 0x40) >> HostPageBits; addr_ != addr_shifted && region.first <= addr_ && addr_ < region.second) { addr2 = addr_; } @@ -164,7 +164,8 @@ void FreeMemoryPages(void* base, [[maybe_unused]] std::size_t size) noexcept { return; #ifdef _WIN32 std::lock_guard lock(vector_regions_mutex); - std::erase_if(vector_regions, [base](const auto& r) {return r.first == reinterpret_cast<u64>(base); }); + // Regions are kept in host pages. + std::erase_if(vector_regions, [base](const auto& r) {return r.first == reinterpret_cast<u64>(base) >> HostPageBits; }); ASSERT(VirtualFree(base, 0, MEM_RELEASE)); #else ASSERT(munmap(base, size) == 0); |
