diff options
author | Qi Wang <interwq@gwu.edu> | 2019-07-24 23:12:06 (GMT) |
---|---|---|
committer | Qi Wang <interwq@gmail.com> | 2019-07-25 01:30:54 (GMT) |
commit | bc0998a9052957584b6944b6f43fffe0648f603e (patch) | |
tree | 3e1de13f5fcd4efc56525dcfd59e4c6009dd6035 | |
parent | 1d148f353a2c71bc12fd066e467649fd17df3c95 (diff) | |
download | jemalloc-bc0998a9052957584b6944b6f43fffe0648f603e.zip jemalloc-bc0998a9052957584b6944b6f43fffe0648f603e.tar.gz jemalloc-bc0998a9052957584b6944b6f43fffe0648f603e.tar.bz2 |
Invoke arena_dalloc_promoted() properly w/o tcache.
When tcache was disabled, the dalloc promoted case was missing.
-rw-r--r-- | include/jemalloc/internal/arena_inlines_b.h | 16 | ||||
-rw-r--r-- | src/arena.c | 2 |
2 files changed, 13 insertions, 5 deletions
diff --git a/include/jemalloc/internal/arena_inlines_b.h b/include/jemalloc/internal/arena_inlines_b.h index 7e61a44..8b657ab 100644 --- a/include/jemalloc/internal/arena_inlines_b.h +++ b/include/jemalloc/internal/arena_inlines_b.h @@ -229,6 +229,16 @@ arena_vsalloc(tsdn_t *tsdn, const void *ptr) { } static inline void +arena_dalloc_large_no_tcache(tsdn_t *tsdn, void *ptr, szind_t szind) { + if (config_prof && unlikely(szind < SC_NBINS)) { + arena_dalloc_promoted(tsdn, ptr, NULL, true); + } else { + extent_t *extent = iealloc(tsdn, ptr); + large_dalloc(tsdn, extent); + } +} + +static inline void arena_dalloc_no_tcache(tsdn_t *tsdn, void *ptr) { assert(ptr != NULL); @@ -252,8 +262,7 @@ arena_dalloc_no_tcache(tsdn_t *tsdn, void *ptr) { /* Small allocation. */ arena_dalloc_small(tsdn, ptr); } else { - extent_t *extent = iealloc(tsdn, ptr); - large_dalloc(tsdn, extent); + arena_dalloc_large_no_tcache(tsdn, ptr, szind); } } @@ -349,8 +358,7 @@ arena_sdalloc_no_tcache(tsdn_t *tsdn, void *ptr, size_t size) { /* Small allocation. */ arena_dalloc_small(tsdn, ptr); } else { - extent_t *extent = iealloc(tsdn, ptr); - large_dalloc(tsdn, extent); + arena_dalloc_large_no_tcache(tsdn, ptr, szind); } } diff --git a/src/arena.c b/src/arena.c index a44d0da..ba50e41 100644 --- a/src/arena.c +++ b/src/arena.c @@ -1610,7 +1610,7 @@ arena_dalloc_promoted(tsdn_t *tsdn, void *ptr, tcache_t *tcache, assert(bumped_usize == SC_LARGE_MINCLASS); safety_check_verify_redzone(ptr, usize, bumped_usize); } - if (bumped_usize <= tcache_maxclass) { + if (bumped_usize <= tcache_maxclass && tcache != NULL) { tcache_dalloc_large(tsdn_tsd(tsdn), tcache, ptr, sz_size2index(bumped_usize), slow_path); } else { |