summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2023-09-07 19:28:46 +0200
committerGitHub <noreply@github.com>2023-09-07 19:28:46 +0200
commitcc01b4b997db5cdac15ecbe5a6c55c8e4e941eb6 (patch)
tree73ff89c5307e00e2a21b0391d3040ec1e8d00dd4 /Source
parentc0440df2882e09e87efae199cdef28669d7c85ef (diff)
parent422bc7a62724643a4d0e92adf857883f73aa9ca6 (diff)
Merge pull request #12173 from AdmiralCurtiss/fixed-mapping-assert
Common/MemArena: LazyMemoryRegion fixes.
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Common/MemArenaAndroid.cpp9
-rw-r--r--Source/Core/Common/MemArenaUnix.cpp9
-rw-r--r--Source/Core/Common/MemArenaWin.cpp3
3 files changed, 17 insertions, 4 deletions
diff --git a/Source/Core/Common/MemArenaAndroid.cpp b/Source/Core/Common/MemArenaAndroid.cpp
index 4a9e2f68b4..bcba64e1e1 100644
--- a/Source/Core/Common/MemArenaAndroid.cpp
+++ b/Source/Core/Common/MemArenaAndroid.cpp
@@ -155,8 +155,11 @@ void* LazyMemoryRegion::Create(size_t size)
{
ASSERT(!m_memory);
+ if (size == 0)
+ return nullptr;
+
void* memory = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- if (!memory)
+ if (memory == MAP_FAILED)
{
NOTICE_LOG_FMT(MEMMAP, "Memory allocation of {} bytes failed.", size);
return nullptr;
@@ -172,7 +175,9 @@ void LazyMemoryRegion::Clear()
{
ASSERT(m_memory);
- mmap(m_memory, m_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+ void* new_memory = mmap(m_memory, m_size, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+ ASSERT(new_memory == m_memory);
}
void LazyMemoryRegion::Release()
diff --git a/Source/Core/Common/MemArenaUnix.cpp b/Source/Core/Common/MemArenaUnix.cpp
index 452c2c50c8..9bf3633ee2 100644
--- a/Source/Core/Common/MemArenaUnix.cpp
+++ b/Source/Core/Common/MemArenaUnix.cpp
@@ -121,8 +121,11 @@ void* LazyMemoryRegion::Create(size_t size)
{
ASSERT(!m_memory);
+ if (size == 0)
+ return nullptr;
+
void* memory = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- if (!memory)
+ if (memory == MAP_FAILED)
{
NOTICE_LOG_FMT(MEMMAP, "Memory allocation of {} bytes failed.", size);
return nullptr;
@@ -138,7 +141,9 @@ void LazyMemoryRegion::Clear()
{
ASSERT(m_memory);
- mmap(m_memory, m_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+ void* new_memory = mmap(m_memory, m_size, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+ ASSERT(new_memory == m_memory);
}
void LazyMemoryRegion::Release()
diff --git a/Source/Core/Common/MemArenaWin.cpp b/Source/Core/Common/MemArenaWin.cpp
index ebf078f45b..b147ced53f 100644
--- a/Source/Core/Common/MemArenaWin.cpp
+++ b/Source/Core/Common/MemArenaWin.cpp
@@ -445,6 +445,9 @@ void* LazyMemoryRegion::Create(size_t size)
{
ASSERT(!m_memory);
+ if (size == 0)
+ return nullptr;
+
void* memory = VirtualAlloc(nullptr, size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (!memory)
{