aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-07-08 10:44:33 -0400
committerGitHub <noreply@github.com>2020-07-08 10:44:33 -0400
commit2a87ddcce28d11f5aa58f524108caadfaefe6ae8 (patch)
tree9a655d4e1295626da82272177be9f23ef05aba6c /src
parentdff8f1f9f87330f937fe5a75327e27ca2b241150 (diff)
parent76bd617b2de80c7b8a36ebd59e6ba483c54e78bc (diff)
Merge pull request #4245 from MerryMage/page-table-race
memory: Race-condition in pagetables.
Diffstat (limited to 'src')
-rw-r--r--src/core/memory.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp
index 7def007689..2c55889334 100644
--- a/src/core/memory.cpp
+++ b/src/core/memory.cpp
@@ -548,9 +548,9 @@ struct Memory::Impl {
// longer exist, and we should just leave the pagetable entry blank.
page_type = Common::PageType::Unmapped;
} else {
- page_type = Common::PageType::Memory;
current_page_table->pointers[vaddr >> PAGE_BITS] =
pointer - (vaddr & ~PAGE_MASK);
+ page_type = Common::PageType::Memory;
}
break;
}
@@ -591,9 +591,12 @@ struct Memory::Impl {
base + page_table.pointers.size());
if (!target) {
+ ASSERT_MSG(type != Common::PageType::Memory,
+ "Mapping memory page without a pointer @ {:016x}", base * PAGE_SIZE);
+
while (base != end) {
- page_table.pointers[base] = nullptr;
page_table.attributes[base] = type;
+ page_table.pointers[base] = nullptr;
page_table.backing_addr[base] = 0;
base += 1;