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 | |||||
madvise(addr, len, MADV_DONTDUMP); | |||||
#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); | ||||
munmap(addr, len); | munmap(addr, len); | ||||
▲ Show 20 Lines • Show All 141 Lines • Show Last 20 Lines |