diff options
author | David Goldblatt <davidgoldblatt@fb.com> | 2017-04-05 00:32:21 (GMT) |
---|---|---|
committer | David Goldblatt <davidtgoldblatt@gmail.com> | 2017-04-05 23:25:37 (GMT) |
commit | 92aafb0efe47dbca23fb5b54c33fd4504601ae76 (patch) | |
tree | af6184752c1e6144284028366fd15888f12b8609 /src | |
parent | 56b72c7b1781ef75c2450a08e08079fe164bb2df (diff) | |
download | jemalloc-92aafb0efe47dbca23fb5b54c33fd4504601ae76.zip jemalloc-92aafb0efe47dbca23fb5b54c33fd4504601ae76.tar.gz jemalloc-92aafb0efe47dbca23fb5b54c33fd4504601ae76.tar.bz2 |
Make base_t's extent_hooks field C11-atomic
Diffstat (limited to 'src')
-rw-r--r-- | src/base.c | 14 |
1 files changed, 4 insertions, 10 deletions
@@ -227,7 +227,7 @@ base_new(tsdn_t *tsdn, unsigned ind, extent_hooks_t *extent_hooks) { base = (base_t *)base_extent_bump_alloc_helper(&block->extent, &gap_size, base_size, base_alignment); base->ind = ind; - base->extent_hooks = extent_hooks; + atomic_store_p(&base->extent_hooks, extent_hooks, ATOMIC_RELAXED); if (malloc_mutex_init(&base->mtx, "base", WITNESS_RANK_BASE)) { base_unmap(extent_hooks, ind, block, block->size); return NULL; @@ -264,20 +264,14 @@ base_delete(base_t *base) { extent_hooks_t * base_extent_hooks_get(base_t *base) { - return (extent_hooks_t *)atomic_read_p(&base->extent_hooks_pun); + return (extent_hooks_t *)atomic_load_p(&base->extent_hooks, + ATOMIC_ACQUIRE); } extent_hooks_t * base_extent_hooks_set(base_t *base, extent_hooks_t *extent_hooks) { extent_hooks_t *old_extent_hooks = base_extent_hooks_get(base); - union { - extent_hooks_t **h; - void **v; - } u; - - u.h = &base->extent_hooks; - atomic_write_p(u.v, extent_hooks); - + atomic_store_p(&base->extent_hooks, extent_hooks, ATOMIC_RELEASE); return old_extent_hooks; } |