diff options
author | Jason Evans <jasone@canonware.com> | 2017-03-10 02:20:02 (GMT) |
---|---|---|
committer | Jason Evans <jasone@canonware.com> | 2017-03-14 01:19:57 (GMT) |
commit | 7cbcd2e2b70d9a8547030b5a8640c85b2b7b50ab (patch) | |
tree | 9e8065b9556d53cec06633119a5db2ed6cc54059 /src/pages.c | |
parent | 21a68e2d22da08e0f60ff79d6866dd3add19775b (diff) | |
download | jemalloc-7cbcd2e2b70d9a8547030b5a8640c85b2b7b50ab.zip jemalloc-7cbcd2e2b70d9a8547030b5a8640c85b2b7b50ab.tar.gz jemalloc-7cbcd2e2b70d9a8547030b5a8640c85b2b7b50ab.tar.bz2 |
Fix pages_purge_forced() to discard pages on non-Linux systems.
madvise(..., MADV_DONTNEED) only causes demand-zeroing on Linux, so fall
back to overlaying a new mapping.
Diffstat (limited to 'src/pages.c')
-rw-r--r-- | src/pages.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/pages.c b/src/pages.c index 444a97c..e80c365 100644 --- a/src/pages.c +++ b/src/pages.c @@ -170,6 +170,9 @@ pages_purge_lazy(void *addr, size_t size) { VirtualAlloc(addr, size, MEM_RESET, PAGE_READWRITE); #elif defined(JEMALLOC_PURGE_MADVISE_FREE) madvise(addr, size, MADV_FREE); +#elif defined(JEMALLOC_PURGE_MADVISE_DONTNEED) && \ + !defined(JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS) + madvise(addr, size, MADV_DONTNEED); #else not_reached(); #endif @@ -182,8 +185,12 @@ pages_purge_forced(void *addr, size_t size) { return true; } -#if defined(JEMALLOC_PURGE_MADVISE_DONTNEED) +#if defined(JEMALLOC_PURGE_MADVISE_DONTNEED) && \ + defined(JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS) return (madvise(addr, size, MADV_DONTNEED) != 0); +#elif defined(JEMALLOC_MAPS_COALESCE) + /* Try to overlay a new demand-zeroed mapping. */ + return pages_commit(addr, size); #else not_reached(); #endif |