b55419f9b9
Develop new data structure and code logic for holding profiling related information stored in the extent that may be needed after the extent is released, which in particular is the case for the reallocation code path (e.g. in `rallocx()` and `xallocx()`). The data structure is a generalization of `prof_tctx_t`: we previously only copy out the `prof_tctx` before the extent is released, but we may be in need of additional fields. Currently the only additional field is the allocation time field, but there may be more fields in the future. The restructuring also resolved a bug: `prof_realloc()` mistakenly passed the new `ptr` to `prof_free_sampled_object()`, but passing in the `old_ptr` would crash because it's already been released. Now the essential profiling information is collectively copied out early and safely passed to `prof_free_sampled_object()` after the extent is released.
32 lines
1.4 KiB
C
32 lines
1.4 KiB
C
#ifndef JEMALLOC_INTERNAL_LARGE_EXTERNS_H
|
|
#define JEMALLOC_INTERNAL_LARGE_EXTERNS_H
|
|
|
|
#include "jemalloc/internal/hook.h"
|
|
|
|
void *large_malloc(tsdn_t *tsdn, arena_t *arena, size_t usize, bool zero);
|
|
void *large_palloc(tsdn_t *tsdn, arena_t *arena, size_t usize, size_t alignment,
|
|
bool zero);
|
|
bool large_ralloc_no_move(tsdn_t *tsdn, extent_t *extent, size_t usize_min,
|
|
size_t usize_max, bool zero);
|
|
void *large_ralloc(tsdn_t *tsdn, arena_t *arena, void *ptr, size_t usize,
|
|
size_t alignment, bool zero, tcache_t *tcache,
|
|
hook_ralloc_args_t *hook_args);
|
|
|
|
typedef void (large_dalloc_junk_t)(void *, size_t);
|
|
extern large_dalloc_junk_t *JET_MUTABLE large_dalloc_junk;
|
|
|
|
typedef void (large_dalloc_maybe_junk_t)(void *, size_t);
|
|
extern large_dalloc_maybe_junk_t *JET_MUTABLE large_dalloc_maybe_junk;
|
|
|
|
void large_dalloc_prep_junked_locked(tsdn_t *tsdn, extent_t *extent);
|
|
void large_dalloc_finish(tsdn_t *tsdn, extent_t *extent);
|
|
void large_dalloc(tsdn_t *tsdn, extent_t *extent);
|
|
size_t large_salloc(tsdn_t *tsdn, const extent_t *extent);
|
|
void large_prof_info_get(tsdn_t *tsdn, const extent_t *extent,
|
|
prof_info_t *prof_info);
|
|
void large_prof_tctx_set(tsdn_t *tsdn, extent_t *extent, prof_tctx_t *tctx);
|
|
void large_prof_tctx_reset(tsdn_t *tsdn, extent_t *extent);
|
|
void large_prof_alloc_time_set(extent_t *extent, nstime_t time);
|
|
|
|
#endif /* JEMALLOC_INTERNAL_LARGE_EXTERNS_H */
|