summaryrefslogtreecommitdiff
path: root/Source/Core/Common/MemArenaUnix.cpp
diff options
context:
space:
mode:
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);
}