summaryrefslogtreecommitdiff
path: root/Source/Core/Common/MemArenaUnix.cpp
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2023-09-12 16:21:59 +0200
committerGitHub <noreply@github.com>2023-09-12 16:21:59 +0200
commit3dada564bf2e2a6e5b58ca0563b3f3e0ab911dd7 (patch)
tree4059a64da6da8d5f0d556e7f2f28e5385c27a669 /Source/Core/Common/MemArenaUnix.cpp
parentd16bedd5c46a6777854a82590b0032ee8ed05e68 (diff)
parent7869abf0e6cd691d37ceb319a29aca4e96396897 (diff)
Merge pull request #12177 from AdmiralCurtiss/noreserve
Common/MemArena: Set MAP_NORESERVE in LazyMemoryRegion on Linux.
Diffstat (limited to 'Source/Core/Common/MemArenaUnix.cpp')
-rw-r--r--Source/Core/Common/MemArenaUnix.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/Source/Core/Common/MemArenaUnix.cpp b/Source/Core/Common/MemArenaUnix.cpp
index 9bf3633ee2..83026f76b8 100644
--- a/Source/Core/Common/MemArenaUnix.cpp
+++ b/Source/Core/Common/MemArenaUnix.cpp
@@ -117,6 +117,12 @@ LazyMemoryRegion::~LazyMemoryRegion()
Release();
}
+#if !defined MAP_NORESERVE && (defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__)
+// BSD does not implement MAP_NORESERVE, so define the flag to nothing.
+// See https://reviews.freebsd.org/rS273250
+#define MAP_NORESERVE 0
+#endif
+
void* LazyMemoryRegion::Create(size_t size)
{
ASSERT(!m_memory);
@@ -124,7 +130,8 @@ void* LazyMemoryRegion::Create(size_t size)
if (size == 0)
return nullptr;
- void* memory = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ void* memory =
+ mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0);
if (memory == MAP_FAILED)
{
NOTICE_LOG_FMT(MEMMAP, "Memory allocation of {} bytes failed.", size);
@@ -142,7 +149,7 @@ void LazyMemoryRegion::Clear()
ASSERT(m_memory);
void* new_memory = mmap(m_memory, m_size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE | MAP_FIXED, -1, 0);
ASSERT(new_memory == m_memory);
}