Refactor arena_malloc_hard() out of arena_malloc().
This commit is contained in:
parent
34676d3369
commit
578cd16581
@ -461,10 +461,10 @@ extern arena_dalloc_junk_small_t *arena_dalloc_junk_small;
|
|||||||
void arena_dalloc_junk_small(void *ptr, arena_bin_info_t *bin_info);
|
void arena_dalloc_junk_small(void *ptr, arena_bin_info_t *bin_info);
|
||||||
#endif
|
#endif
|
||||||
void arena_quarantine_junk_small(void *ptr, size_t usize);
|
void arena_quarantine_junk_small(void *ptr, size_t usize);
|
||||||
void *arena_malloc_small(arena_t *arena, size_t size, szind_t ind,
|
void *arena_malloc_large(arena_t *arena, size_t size,
|
||||||
bool zero);
|
szind_t ind, bool zero);
|
||||||
void *arena_malloc_large(arena_t *arena, size_t size, szind_t ind,
|
void *arena_malloc_hard(tsd_t *tsd, arena_t *arena, size_t size, szind_t ind,
|
||||||
bool zero);
|
bool zero, tcache_t *tcache);
|
||||||
void *arena_palloc(tsd_t *tsd, arena_t *arena, size_t usize,
|
void *arena_palloc(tsd_t *tsd, arena_t *arena, size_t usize,
|
||||||
size_t alignment, bool zero, tcache_t *tcache);
|
size_t alignment, bool zero, tcache_t *tcache);
|
||||||
void arena_prof_promoted(const void *ptr, size_t size);
|
void arena_prof_promoted(const void *ptr, size_t size);
|
||||||
@ -1160,8 +1160,8 @@ arena_prof_tctx_reset(const void *ptr, size_t usize, const void *old_ptr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
JEMALLOC_ALWAYS_INLINE void *
|
JEMALLOC_ALWAYS_INLINE void *
|
||||||
arena_malloc(tsd_t *tsd, arena_t *arena, size_t size, szind_t ind,
|
arena_malloc(tsd_t *tsd, arena_t *arena, size_t size, szind_t ind, bool zero,
|
||||||
bool zero, tcache_t *tcache, bool slow_path)
|
tcache_t *tcache, bool slow_path)
|
||||||
{
|
{
|
||||||
|
|
||||||
assert(size != 0);
|
assert(size != 0);
|
||||||
@ -1179,15 +1179,7 @@ arena_malloc(tsd_t *tsd, arena_t *arena, size_t size, szind_t ind,
|
|||||||
assert(size > tcache_maxclass);
|
assert(size > tcache_maxclass);
|
||||||
}
|
}
|
||||||
|
|
||||||
arena = arena_choose(tsd, arena);
|
return (arena_malloc_hard(tsd, arena, size, ind, zero, tcache));
|
||||||
if (unlikely(arena == NULL))
|
|
||||||
return (NULL);
|
|
||||||
|
|
||||||
if (likely(size <= SMALL_MAXCLASS))
|
|
||||||
return (arena_malloc_small(arena, size, ind, zero));
|
|
||||||
if (likely(size <= large_maxclass))
|
|
||||||
return (arena_malloc_large(arena, size, ind, zero));
|
|
||||||
return (huge_malloc(tsd, arena, size, zero, tcache));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JEMALLOC_ALWAYS_INLINE arena_t *
|
JEMALLOC_ALWAYS_INLINE arena_t *
|
||||||
|
@ -35,8 +35,8 @@ arena_lg_dirty_mult_default_set
|
|||||||
arena_lg_dirty_mult_get
|
arena_lg_dirty_mult_get
|
||||||
arena_lg_dirty_mult_set
|
arena_lg_dirty_mult_set
|
||||||
arena_malloc
|
arena_malloc
|
||||||
|
arena_malloc_hard
|
||||||
arena_malloc_large
|
arena_malloc_large
|
||||||
arena_malloc_small
|
|
||||||
arena_mapbits_allocated_get
|
arena_mapbits_allocated_get
|
||||||
arena_mapbits_binind_get
|
arena_mapbits_binind_get
|
||||||
arena_mapbits_decommitted_get
|
arena_mapbits_decommitted_get
|
||||||
|
18
src/arena.c
18
src/arena.c
@ -2123,7 +2123,7 @@ arena_quarantine_junk_small(void *ptr, size_t usize)
|
|||||||
arena_redzones_validate(ptr, bin_info, true);
|
arena_redzones_validate(ptr, bin_info, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
static void *
|
||||||
arena_malloc_small(arena_t *arena, size_t size, szind_t binind, bool zero)
|
arena_malloc_small(arena_t *arena, size_t size, szind_t binind, bool zero)
|
||||||
{
|
{
|
||||||
void *ret;
|
void *ret;
|
||||||
@ -2236,6 +2236,22 @@ arena_malloc_large(arena_t *arena, size_t size, szind_t binind, bool zero)
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
arena_malloc_hard(tsd_t *tsd, arena_t *arena, size_t size, szind_t ind,
|
||||||
|
bool zero, tcache_t *tcache)
|
||||||
|
{
|
||||||
|
|
||||||
|
arena = arena_choose(tsd, arena);
|
||||||
|
if (unlikely(arena == NULL))
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
if (likely(size <= SMALL_MAXCLASS))
|
||||||
|
return (arena_malloc_small(arena, size, ind, zero));
|
||||||
|
if (likely(size <= large_maxclass))
|
||||||
|
return (arena_malloc_large(arena, size, ind, zero));
|
||||||
|
return (huge_malloc(tsd, arena, size, zero, tcache));
|
||||||
|
}
|
||||||
|
|
||||||
/* Only handles large allocations that require more than page alignment. */
|
/* Only handles large allocations that require more than page alignment. */
|
||||||
static void *
|
static void *
|
||||||
arena_palloc_large(tsd_t *tsd, arena_t *arena, size_t usize, size_t alignment,
|
arena_palloc_large(tsd_t *tsd, arena_t *arena, size_t usize, size_t alignment,
|
||||||
|
Loading…
Reference in New Issue
Block a user