577d4572b0
Rather than protecting dss operations with a mutex, use atomic operations. This has negligible impact on synchronization overhead during typical dss allocation, but is a substantial improvement for extent_in_dss() and the newly added extent_dss_mergeable(), which can be called multiple times during extent deallocations. This change also has the advantage of avoiding tsd in deallocation paths associated with purging, which resolves potential deadlocks during thread exit due to attempted tsd resurrection. This resolves #425.
41 lines
1.7 KiB
C
41 lines
1.7 KiB
C
/******************************************************************************/
|
|
#ifdef JEMALLOC_H_TYPES
|
|
|
|
#endif /* JEMALLOC_H_TYPES */
|
|
/******************************************************************************/
|
|
#ifdef JEMALLOC_H_STRUCTS
|
|
|
|
#endif /* JEMALLOC_H_STRUCTS */
|
|
/******************************************************************************/
|
|
#ifdef JEMALLOC_H_EXTERNS
|
|
|
|
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, extent_t *extent,
|
|
size_t usize, size_t alignment, bool zero, tcache_t *tcache);
|
|
#ifdef JEMALLOC_JET
|
|
typedef void (large_dalloc_junk_t)(void *, size_t);
|
|
extern large_dalloc_junk_t *large_dalloc_junk;
|
|
typedef void (large_dalloc_maybe_junk_t)(void *, size_t);
|
|
extern large_dalloc_maybe_junk_t *large_dalloc_maybe_junk;
|
|
#else
|
|
void large_dalloc_junk(void *ptr, size_t usize);
|
|
void large_dalloc_maybe_junk(void *ptr, size_t usize);
|
|
#endif
|
|
void large_dalloc_junked_locked(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);
|
|
prof_tctx_t *large_prof_tctx_get(tsdn_t *tsdn, const extent_t *extent);
|
|
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);
|
|
|
|
#endif /* JEMALLOC_H_EXTERNS */
|
|
/******************************************************************************/
|
|
#ifdef JEMALLOC_H_INLINES
|
|
|
|
#endif /* JEMALLOC_H_INLINES */
|
|
/******************************************************************************/
|