From 9a3c73800991d3508516208127994a1fc3837de5 Mon Sep 17 00:00:00 2001 From: Qi Wang Date: Tue, 5 Nov 2019 13:22:54 -0800 Subject: [PATCH] Refactor arena_bin_malloc_hard(). --- src/arena.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/arena.c b/src/arena.c index f6e9402d..5537e66f 100644 --- a/src/arena.c +++ b/src/arena.c @@ -1311,21 +1311,21 @@ arena_bin_nonfull_slab_get(tsdn_t *tsdn, arena_t *arena, bin_t *bin, static void * arena_bin_malloc_hard(tsdn_t *tsdn, arena_t *arena, bin_t *bin, szind_t binind, unsigned binshard) { - const bin_info_t *bin_info; - extent_t *slab; - bin_info = &bin_infos[binind]; - if (!arena_is_auto(arena) && bin->slabcur != NULL) { - arena_bin_slabs_full_insert(arena, bin, bin->slabcur); - bin->slabcur = NULL; - } - slab = arena_bin_nonfull_slab_get(tsdn, arena, bin, binind, binshard); if (bin->slabcur != NULL) { - /* - * Another thread updated slabcur while this one ran without the - * bin lock in arena_bin_nonfull_slab_get(). - */ + /* Only attempted when current slab is full. */ + assert(extent_nfree_get(bin->slabcur) == 0); + } + + const bin_info_t *bin_info = &bin_infos[binind]; + extent_t *slab = arena_bin_nonfull_slab_get(tsdn, arena, bin, binind, + binshard); + if (bin->slabcur != NULL) { if (extent_nfree_get(bin->slabcur) > 0) { + /* + * Another thread updated slabcur while this one ran + * without the bin lock in arena_bin_nonfull_slab_get(). + */ void *ret = arena_slab_reg_alloc(bin->slabcur, bin_info); if (slab != NULL) { @@ -1357,7 +1357,6 @@ arena_bin_malloc_hard(tsdn_t *tsdn, arena_t *arena, bin_t *bin, return NULL; } bin->slabcur = slab; - assert(extent_nfree_get(bin->slabcur) > 0); return arena_slab_reg_alloc(slab, bin_info);