diff options
| author | Jason Evans <jasone@canonware.com> | 2017-02-12 17:43:33 -0800 |
|---|---|---|
| committer | Jason Evans <jasone@canonware.com> | 2017-02-16 09:39:46 -0800 |
| commit | 6b5cba41916549f1aa37adac45659b60293d9495 (patch) | |
| tree | 8f6dd1067519492220a2a7ab5429972d2c245b37 /src/large.c | |
| parent | fa2d64c94b07ee21a0f6f44b9fe6e3bbefa51c6c (diff) | |
| download | platform_external_jemalloc_new-6b5cba41916549f1aa37adac45659b60293d9495.tar.gz platform_external_jemalloc_new-6b5cba41916549f1aa37adac45659b60293d9495.tar.bz2 platform_external_jemalloc_new-6b5cba41916549f1aa37adac45659b60293d9495.zip | |
Convert arena->stats synchronization to atomics.
Diffstat (limited to 'src/large.c')
| -rw-r--r-- | src/large.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/large.c b/src/large.c index bfe2f714..55e0737e 100644 --- a/src/large.c +++ b/src/large.c @@ -286,20 +286,23 @@ large_ralloc(tsdn_t *tsdn, arena_t *arena, extent_t *extent, size_t usize, /* * junked_locked indicates whether the extent's data have been junk-filled, and - * whether the arena's lock is currently held. The arena's large_mtx is - * independent of these considerations. + * whether the arena's large_mtx is currently held. */ static void large_dalloc_prep_impl(tsdn_t *tsdn, arena_t *arena, extent_t *extent, bool junked_locked) { - malloc_mutex_lock(tsdn, &arena->large_mtx); - extent_list_remove(&arena->large, extent); - malloc_mutex_unlock(tsdn, &arena->large_mtx); + if (!junked_locked) { + malloc_mutex_lock(tsdn, &arena->large_mtx); + extent_list_remove(&arena->large, extent); + malloc_mutex_unlock(tsdn, &arena->large_mtx); large_dalloc_maybe_junk(extent_addr_get(extent), extent_usize_get(extent)); + } else { + malloc_mutex_assert_owner(tsdn, &arena->large_mtx); + extent_list_remove(&arena->large, extent); } - arena_extent_dalloc_large_prep(tsdn, arena, extent, junked_locked); + arena_extent_dalloc_large_prep(tsdn, arena, extent); } static void |
