* malloc/arena.c (arena_get2): Avoid unnecessarily retrieving #cpus from /proc. * malloc/malloc.c (mALLOPt): Clamp arena_test based on the value of arena_max. diff --git a/malloc/arena.c b/malloc/arena.c index cb8548b..00f1da5 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -828,7 +828,7 @@ arena_get2(mstate a_tsd, size_t size) { if (mp_.arena_max != 0) narenas_limit = mp_.arena_max; - else + else if (narenas > mp_.arena_test) { int n = __get_nprocs (); diff --git a/malloc/malloc.c b/malloc/malloc.c index 8608083..f8d32da 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -6134,6 +6134,12 @@ int mALLOPt(param_number, value) int par break; #endif } +#ifdef PER_THREAD + /* Clamp ARENA_TEST from ARENA_MAX to avoid creating too many + arenas. */ + if (mp_.arena_max > 0 && mp_.arena_max <= mp_.arena_test) + mp_.arena_test = mp_.arena_max - 1; +#endif (void)mutex_unlock(&av->mutex); return res; }