Support malloc() even after tcache destruction has occurred, since other tsd
destructors may run after tcache_tsd's.
This commit is contained in:
parent
79a78691b6
commit
64bd7661a8
@ -3426,24 +3426,23 @@ arena_malloc(size_t size, bool zero)
|
|||||||
#ifdef JEMALLOC_TCACHE
|
#ifdef JEMALLOC_TCACHE
|
||||||
if (isthreaded && tcache_nslots) {
|
if (isthreaded && tcache_nslots) {
|
||||||
tcache_t *tcache = tcache_tls;
|
tcache_t *tcache = tcache_tls;
|
||||||
if (tcache == NULL) {
|
if ((uintptr_t)tcache > (uintptr_t)1)
|
||||||
|
return (tcache_alloc(tcache, size, zero));
|
||||||
|
else if (tcache == NULL) {
|
||||||
tcache = tcache_create(choose_arena());
|
tcache = tcache_create(choose_arena());
|
||||||
if (tcache == NULL)
|
if (tcache == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
return (tcache_alloc(tcache, size, zero));
|
||||||
}
|
}
|
||||||
return (tcache_alloc(tcache, size, zero));
|
|
||||||
} else {
|
|
||||||
#endif
|
|
||||||
if (size <= small_maxclass) {
|
|
||||||
return (arena_malloc_small(choose_arena(), size,
|
|
||||||
zero));
|
|
||||||
} else {
|
|
||||||
return (arena_malloc_medium(choose_arena(),
|
|
||||||
size, zero));
|
|
||||||
}
|
|
||||||
#ifdef JEMALLOC_TCACHE
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (size <= small_maxclass) {
|
||||||
|
return (arena_malloc_small(choose_arena(), size,
|
||||||
|
zero));
|
||||||
|
} else {
|
||||||
|
return (arena_malloc_medium(choose_arena(),
|
||||||
|
size, zero));
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
return (arena_malloc_large(choose_arena(), size, zero));
|
return (arena_malloc_large(choose_arena(), size, zero));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user