aboutsummaryrefslogtreecommitdiffstats
path: root/src/large.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/large.c')
-rw-r--r--src/large.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/large.c b/src/large.c
index 27a2c679..cbffd99b 100644
--- a/src/large.c
+++ b/src/large.c
@@ -42,7 +42,15 @@ large_palloc(tsdn_t *tsdn, arena_t *arena, size_t usize, size_t alignment,
*/
is_zeroed = zero;
if (likely(!tsdn_null(tsdn))) {
+#if defined(__ANDROID__) && !defined(__LP64__)
+ /* On 32 bit systems, using a per arena cache can exhaust
+ * virtual address space. Force all huge allocations to
+ * always take place in the first arena.
+ */
+ arena = arena_get(tsdn, 0, false);
+#else
arena = arena_choose(tsdn_tsd(tsdn), arena);
+#endif
}
if (unlikely(arena == NULL) || (extent = arena_extent_alloc_large(tsdn,
arena, usize, alignment, &is_zeroed)) == NULL) {