Common/MemArena: Set MAP_NORESERVE in LazyMemoryRegion on Linux.

This commit is contained in:
Admiral H. Curtiss 2023-09-10 03:27:53 +02:00
parent 1a0f0e7e96
commit 7869abf0e6
No known key found for this signature in database
GPG Key ID: F051B4C4044F33FB
1 changed files with 9 additions and 2 deletions

View File

@ -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);
}