From 7869abf0e6cd691d37ceb319a29aca4e96396897 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Sun, 10 Sep 2023 03:27:53 +0200 Subject: [PATCH] Common/MemArena: Set MAP_NORESERVE in LazyMemoryRegion on Linux. --- Source/Core/Common/MemArenaUnix.cpp | 11 +++++++++-- 1 file 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); }