diff options
author | daan <daanl@outlook.com> | 2020-07-26 18:00:38 -0700 |
---|---|---|
committer | daan <daanl@outlook.com> | 2020-07-26 18:01:33 -0700 |
commit | ef8e5d18a65f653bbef9cf57694aff37d2e85b9d (patch) | |
tree | 62854c492eba5e268907a628b3e3a3a5ed3d4ff3 /include/mimalloc-internal.h | |
parent | a468430772a687085054e8380a94f794bd740f5c (diff) |
replace atomics with C11/C++ atomics with explicit memory order; passes tsan. Issue #130
Diffstat (limited to 'include/mimalloc-internal.h')
-rw-r--r-- | include/mimalloc-internal.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/include/mimalloc-internal.h b/include/mimalloc-internal.h index 2dc7e36..1afdae9 100644 --- a/include/mimalloc-internal.h +++ b/include/mimalloc-internal.h @@ -448,21 +448,21 @@ static inline size_t mi_page_usable_block_size(const mi_page_t* page) { // Thread free access static inline mi_block_t* mi_page_thread_free(const mi_page_t* page) { - return (mi_block_t*)(mi_atomic_read_relaxed(&page->xthread_free) & ~3); + return (mi_block_t*)(mi_atomic_load_relaxed(&((mi_page_t*)page)->xthread_free) & ~3); } static inline mi_delayed_t mi_page_thread_free_flag(const mi_page_t* page) { - return (mi_delayed_t)(mi_atomic_read_relaxed(&page->xthread_free) & 3); + return (mi_delayed_t)(mi_atomic_load_relaxed(&((mi_page_t*)page)->xthread_free) & 3); } // Heap access static inline mi_heap_t* mi_page_heap(const mi_page_t* page) { - return (mi_heap_t*)(mi_atomic_read_relaxed(&page->xheap)); + return (mi_heap_t*)(mi_atomic_load_relaxed(&((mi_page_t*)page)->xheap)); } static inline void mi_page_set_heap(mi_page_t* page, mi_heap_t* heap) { mi_assert_internal(mi_page_thread_free_flag(page) != MI_DELAYED_FREEING); - mi_atomic_write(&page->xheap,(uintptr_t)heap); + mi_atomic_store_release(&page->xheap,(uintptr_t)heap); } // Thread free flag helpers |