Changeset View
Changeset View
Standalone View
Standalone View
src/support/lockedpool.cpp
Show First 20 Lines • Show All 249 Lines • ▼ Show 20 Lines | void *PosixLockedPageAllocator::AllocateLocked(size_t len, | ||||
len = align_up(len, page_size); | len = align_up(len, page_size); | ||||
addr = mmap(nullptr, len, PROT_READ | PROT_WRITE, | addr = mmap(nullptr, len, PROT_READ | PROT_WRITE, | ||||
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | ||||
if (addr == MAP_FAILED) { | if (addr == MAP_FAILED) { | ||||
return nullptr; | return nullptr; | ||||
} | } | ||||
if (addr) { | if (addr) { | ||||
*lockingSuccess = mlock(addr, len) == 0; | *lockingSuccess = mlock(addr, len) == 0; | ||||
#ifdef MADV_DONTDUMP | #if defined(MADV_DONTDUMP) // Linux | ||||
madvise(addr, len, MADV_DONTDUMP); | madvise(addr, len, MADV_DONTDUMP); | ||||
#elif defined(MADV_NOCORE) // FreeBSD | |||||
madvise(addr, len, MADV_NOCORE); | |||||
#endif | #endif | ||||
} | } | ||||
return addr; | return addr; | ||||
} | } | ||||
void PosixLockedPageAllocator::FreeLocked(void *addr, size_t len) { | void PosixLockedPageAllocator::FreeLocked(void *addr, size_t len) { | ||||
len = align_up(len, page_size); | len = align_up(len, page_size); | ||||
memory_cleanse(addr, len); | memory_cleanse(addr, len); | ||||
munlock(addr, len); | munlock(addr, len); | ||||
▲ Show 20 Lines • Show All 142 Lines • Show Last 20 Lines |