diff options
author | Tim Murray <timmurray@google.com> | 2018-10-15 16:26:56 -0700 |
---|---|---|
committer | Tim Murray <timmurray@google.com> | 2018-10-18 23:25:49 +0000 |
commit | 8a07791fbff0dd014ce5da8d88969d09cd3dcf0b (patch) | |
tree | 3ad18c057933a7ed26c927a7e1703b472aee2724 | |
parent | fbe26c723af60b101a6df9c066c1b661b6ab966c (diff) | |
download | bionic-8a07791fbff0dd014ce5da8d88969d09cd3dcf0b.tar.gz |
malloc: add M_PURGE mallopt flag
Add a new mallopt flag that purges any pending decaying pages.
Test: boots and works
bug 117795621
Merged-in: Ib250ae2b705b6a368c1efb801d6a7be54e075acb
Change-Id: Ib250ae2b705b6a368c1efb801d6a7be54e075acb
-rw-r--r-- | libc/bionic/jemalloc_wrapper.cpp | 12 | ||||
-rw-r--r-- | libc/include/malloc.h | 1 |
2 files changed, 13 insertions, 0 deletions
diff --git a/libc/bionic/jemalloc_wrapper.cpp b/libc/bionic/jemalloc_wrapper.cpp index 19081a4c5..0e82066ee 100644 --- a/libc/bionic/jemalloc_wrapper.cpp +++ b/libc/bionic/jemalloc_wrapper.cpp @@ -79,6 +79,18 @@ int je_mallopt(int param, int value) { } } return 1; + } else if (param == M_PURGE) { + unsigned narenas; + size_t sz = sizeof(unsigned); + if (je_mallctl("arenas.narenas", &narenas, &sz, nullptr, 0) != 0) { + return 0; + } + char buffer[100]; + snprintf(buffer, sizeof(buffer), "arena.%u.purge", narenas); + if (je_mallctl(buffer, nullptr, nullptr, nullptr, 0) != 0) { + return 0; + } + return 1; } return 0; } diff --git a/libc/include/malloc.h b/libc/include/malloc.h index 3a678a94e..d850a3b83 100644 --- a/libc/include/malloc.h +++ b/libc/include/malloc.h @@ -79,6 +79,7 @@ int malloc_info(int __must_be_zero, FILE* __fp) __INTRODUCED_IN(23); /* mallopt options */ #define M_DECAY_TIME -100 +#define M_PURGE -101 int mallopt(int __option, int __value) __INTRODUCED_IN(26); /* |