Browse Source

[core] more verbose asserts for HostMemory

remotes/1785372757367212240/tmp_refs/heads/variable-page-size
Exverge 4 weeks ago
parent
commit
564a35b080
No known key found for this signature in database GPG Key ID: DAD399BCC5FB77E4
  1. 22
      src/common/host_memory.cpp

22
src/common/host_memory.cpp

@ -251,7 +251,7 @@ public:
}
void Protect(size_t virtual_offset, size_t length, bool read, bool write, bool execute) {
// If we are direct mapping, intersect this region with
// If we are direct mapping, intersect the range with our address space.
if (virtual_base == nullptr) {
AdjustMap(virtual_map_base, virtual_size, &virtual_offset, &length);
}
@ -279,7 +279,7 @@ public:
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");
LOG_CRITICAL(HW_Memory, "Failed to change virtual memory protect rules, error {}", GetLastError());
}
++it;
}
@ -304,26 +304,26 @@ private:
for (const auto& placeholder : placeholders) {
if (!pfn_UnmapViewOfFile2(process, virtual_base + placeholder.lower(),
MEM_PRESERVE_PLACEHOLDER)) {
LOG_CRITICAL(HW_Memory, "Failed to unmap virtual memory placeholder");
LOG_CRITICAL(HW_Memory, "Failed to unmap virtual memory placeholder, error {}", GetLastError());
}
}
Coalesce(0, virtual_size);
}
if (virtual_map_base) {
if (!VirtualFree(virtual_map_base, 0, MEM_RELEASE)) {
LOG_CRITICAL(HW_Memory, "Failed to free virtual memory");
LOG_CRITICAL(HW_Memory, "Failed to free virtual memory, error {}", GetLastError());
}
}
if (backing_base) {
if (!pfn_UnmapViewOfFile2(process, backing_base, MEM_PRESERVE_PLACEHOLDER)) {
LOG_CRITICAL(HW_Memory, "Failed to unmap backing memory placeholder");
LOG_CRITICAL(HW_Memory, "Failed to unmap backing memory placeholder, error {}", GetLastError());
}
if (!VirtualFreeEx(process, backing_base, 0, MEM_RELEASE)) {
LOG_CRITICAL(HW_Memory, "Failed to free backing memory");
LOG_CRITICAL(HW_Memory, "Failed to free backing memory, error {}", GetLastError());
}
}
if (!CloseHandle(backing_handle)) {
LOG_CRITICAL(HW_Memory, "Failed to free backing memory file handle");
LOG_CRITICAL(HW_Memory, "Failed to free backing memory file handle, error {}", GetLastError());
}
}
@ -352,7 +352,7 @@ private:
if (!pfn_UnmapViewOfFile2(process, virtual_base + placeholder_begin,
MEM_PRESERVE_PLACEHOLDER)) {
LOG_CRITICAL(HW_Memory, "Failed to unmap placeholder");
LOG_CRITICAL(HW_Memory, "Failed to unmap placeholder, error {}", GetLastError());
}
// If we have to remap memory regions due to partial unmaps, we are in a data race as
// Windows doesn't support remapping memory without unmapping first. Avoid adding any extra
@ -403,21 +403,21 @@ private:
void MapView(size_t virtual_offset, size_t host_offset, size_t length) {
if (!pfn_MapViewOfFile3(backing_handle, process, virtual_base + virtual_offset, host_offset,
length, MEM_REPLACE_PLACEHOLDER, PAGE_READWRITE, nullptr, 0)) {
LOG_CRITICAL(HW_Memory, "Failed to map placeholder");
LOG_CRITICAL(HW_Memory, "Failed to map placeholder, error {}", GetLastError());
}
}
void Split(size_t virtual_offset, size_t length) {
if (!VirtualFreeEx(process, reinterpret_cast<LPVOID>(virtual_base + virtual_offset), length,
MEM_RELEASE | MEM_PRESERVE_PLACEHOLDER)) {
LOG_CRITICAL(HW_Memory, "Failed to split placeholder");
LOG_CRITICAL(HW_Memory, "Failed to split placeholder, error {}", GetLastError());
}
}
void Coalesce(size_t virtual_offset, size_t length) {
if (!VirtualFreeEx(process, reinterpret_cast<LPVOID>(virtual_base + virtual_offset), length,
MEM_RELEASE | MEM_COALESCE_PLACEHOLDERS)) {
LOG_CRITICAL(HW_Memory, "Failed to coalesce placeholders");
LOG_CRITICAL(HW_Memory, "Failed to coalesce placeholders, error {}", GetLastError());
}
}

Loading…
Cancel
Save