From 0222fb41d1fc8e882f7872999ddaa09193d58912 Mon Sep 17 00:00:00 2001 From: Jason Evans Date: Fri, 23 Sep 2016 12:18:36 -0700 Subject: [PATCH] Add various mutex ownership assertions. --- include/jemalloc/internal/arena.h | 2 ++ src/arena.c | 2 ++ src/extent.c | 16 ++++++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/include/jemalloc/internal/arena.h b/include/jemalloc/internal/arena.h index cee90b50..1758dd02 100644 --- a/include/jemalloc/internal/arena.h +++ b/include/jemalloc/internal/arena.h @@ -521,6 +521,8 @@ JEMALLOC_ALWAYS_INLINE void arena_decay_tick(tsdn_t *tsdn, arena_t *arena) { + malloc_mutex_assert_not_owner(tsdn, &arena->lock); + arena_decay_ticks(tsdn, arena, 1); } diff --git a/src/arena.c b/src/arena.c index da9e9859..42cd3b09 100644 --- a/src/arena.c +++ b/src/arena.c @@ -383,6 +383,8 @@ arena_extent_dalloc_large(tsdn_t *tsdn, arena_t *arena, extent_t *extent, if (!locked) malloc_mutex_lock(tsdn, &arena->lock); + else + malloc_mutex_assert_owner(tsdn, &arena->lock); if (config_stats) { arena_large_dalloc_stats_update(arena, extent_usize_get(extent)); diff --git a/src/extent.c b/src/extent.c index 3ab48ca0..f88c4240 100644 --- a/src/extent.c +++ b/src/extent.c @@ -356,11 +356,13 @@ extent_deregister(tsdn_t *tsdn, extent_t *extent) * fits. */ static extent_t * -extent_first_best_fit(arena_t *arena, extent_heap_t extent_heaps[NPSIZES], - size_t size) +extent_first_best_fit(tsdn_t *tsdn, arena_t *arena, + extent_heap_t extent_heaps[NPSIZES], size_t size) { pszind_t pind, i; + malloc_mutex_assert_owner(tsdn, &arena->extents_mtx); + pind = psz2ind(extent_size_quantize_ceil(size)); for (i = pind; i < NPSIZES; i++) { extent_t *extent = extent_heap_first(&extent_heaps[i]); @@ -398,6 +400,8 @@ extent_recycle(tsdn_t *tsdn, arena_t *arena, extent_hooks_t **r_extent_hooks, rtree_ctx_t *rtree_ctx = tsdn_rtree_ctx(tsdn, &rtree_ctx_fallback); size_t size, alloc_size, leadsize, trailsize; + if (locked) + malloc_mutex_assert_owner(tsdn, &arena->extents_mtx); assert(new_addr == NULL || !slab); assert(pad == 0 || !slab); if (config_debug && new_addr != NULL) { @@ -447,8 +451,10 @@ extent_recycle(tsdn_t *tsdn, arena_t *arena, extent_hooks_t **r_extent_hooks, rtree_elm_release(tsdn, &extents_rtree, elm); } else extent = NULL; - } else - extent = extent_first_best_fit(arena, extent_heaps, alloc_size); + } else { + extent = extent_first_best_fit(tsdn, arena, extent_heaps, + alloc_size); + } if (extent == NULL) { if (!locked) malloc_mutex_unlock(tsdn, &arena->extents_mtx); @@ -586,8 +592,6 @@ extent_alloc_cache_impl(tsdn_t *tsdn, arena_t *arena, assert(usize + pad != 0); assert(alignment != 0); - if (locked) - malloc_mutex_assert_owner(tsdn, &arena->extents_mtx); commit = true; extent = extent_recycle(tsdn, arena, r_extent_hooks,