diff options
author | Tim Murray <timmurray@google.com> | 2018-10-15 16:26:56 -0700 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-10-20 00:16:51 +0000 |
commit | 5e8614d22e9ded651791553b2bf27c50fa0ff914 (patch) | |
tree | 3ad18c057933a7ed26c927a7e1703b472aee2724 | |
parent | dbf4b11b1158137e55342d250f624196a8912e07 (diff) | |
download | bionic-5e8614d22e9ded651791553b2bf27c50fa0ff914.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
(cherry picked from commit 8a07791fbff0dd014ce5da8d88969d09cd3dcf0b)
-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); /* |