@cryptotaxi247 / netdata / commits / 60f270b33

Ensure memory ordering when updating partition list and the bitmap (#20956)

Stelios Fragkakis committed Sep 11, 2025 at 19:41 UTC 60f270b3359ebca68e788293d43d957e213a34ee
1 file changed +3 -3
src/libnetdata/aral/aral.c
+3 -3
@@ -851,7 +851,7 @@ static ALWAYS_INLINE void *aral_get_free_slot___no_lock_required(ARAL *ar, ARAL_
851 aral_page_available_lock(ar, page);
852
853 while(!page->available.list) {
854 - uint32_t bitmap = __atomic_load_n(&page->incoming_partition_bitmap, __ATOMIC_RELAXED);
854 + uint32_t bitmap = __atomic_load_n(&page->incoming_partition_bitmap, __ATOMIC_ACQUIRE);
855 if (!bitmap)
856 fatal("ARAL: bitmap of incoming free elements cannot be empty at this point");
857
@@ -868,7 +868,7 @@ static ALWAYS_INLINE void *aral_get_free_slot___no_lock_required(ARAL *ar, ARAL_
868 if (aral_page_incoming_trylock(ar, page, partition)) {
869 page->available.list = page->incoming[partition].list;
870 page->incoming[partition].list = NULL;
871 - __atomic_fetch_and(&page->incoming_partition_bitmap, ~(1U << partition), __ATOMIC_RELAXED);
871 + __atomic_fetch_and(&page->incoming_partition_bitmap, ~(1U << partition), __ATOMIC_RELEASE);
872 aral_page_incoming_unlock(ar, page, partition);
873 break;
874 }
@@ -903,7 +903,7 @@ static inline void aral_add_free_slot___no_lock_required(ARAL *ar, ARAL_PAGE *pa
903 if (aral_page_incoming_trylock(ar, page, partition)) {
904 fr->next = page->incoming[partition].list;
905 page->incoming[partition].list = fr;
906 - __atomic_fetch_or(&page->incoming_partition_bitmap, 1U << partition, __ATOMIC_RELAXED);
906 + __atomic_fetch_or(&page->incoming_partition_bitmap, 1U << partition, __ATOMIC_RELEASE);
907 aral_page_incoming_unlock(ar, page, partition);
908 return;
909 }