Support malloc() even after tcache destruction has occurred, since other tsd

destructors may run after tcache_tsd's.
This commit is contained in:
Jason Evans 2010-01-12 18:13:39 -08:00
parent 79a78691b6
commit 64bd7661a8

View File

@ -3426,13 +3426,15 @@ arena_malloc(size_t size, bool zero)
#ifdef JEMALLOC_TCACHE
if (isthreaded && tcache_nslots) {
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());
if (tcache == NULL)
return (NULL);
}
return (tcache_alloc(tcache, size, zero));
} else {
}
}
#endif
if (size <= small_maxclass) {
return (arena_malloc_small(choose_arena(), size,
@ -3441,9 +3443,6 @@ arena_malloc(size_t size, bool zero)
return (arena_malloc_medium(choose_arena(),
size, zero));
}
#ifdef JEMALLOC_TCACHE
}
#endif
} else
return (arena_malloc_large(choose_arena(), size, zero));
}