chg: dev: Use atomics for CMM_{LOAD,STORE}_SHARED with ThreadSanitizer

Upstream has removed the atomics implementation of CMM_LOAD_SHARED and
CMM_STORE_SHARED as these can be used also with non-stdatomics types.
As we only use the CMM api with stdatomics types, we can restore the
previous behaviour to prevent ThreadSanitizer warnings.

Closes #5660

Merge branch '5660-use-atomics-for-CMM-api-with-thread-sanitizer' into 'main'

See merge request isc-projects/bind9!11288
This commit is contained in:
Ondřej Surý 2025-11-27 10:31:57 +01:00
commit 6fd209b6f0

View file

@ -141,3 +141,32 @@
#endif /* !defined(caa_container_of_check_null) */
/* clang-format on */
#ifdef __SANITIZE_THREAD__
/*
* Restore the behaviour removed in
* https://github.com/urcu/userspace-rcu/commit/5cd787d0f953182a23d340669b20b150fd50c18c
* as we only use CMM_LOAD_SHARED() and CMM_STORE_SHARED() with atomic types.
*/
#undef CMM_LOAD_SHARED
#define CMM_LOAD_SHARED(x) \
__atomic_load_n(cmm_cast_volatile(&(x)), __ATOMIC_RELAXED)
#undef _CMM_LOAD_SHARED
#define _CMM_LOAD_SHARED(x) CMM_LOAD_SHARED(x)
#undef CMM_STORE_SHARED
#define CMM_STORE_SHARED(x, v) \
__extension__({ \
__typeof__(v) _v = (v); \
__atomic_store_n(cmm_cast_volatile(&(x)), _v, \
__ATOMIC_RELAXED); \
_v; \
})
#undef _CMM_STORE_SHARED
#define _CMM_STORE_SHARED(x, v) CMM_STORE_SHARED(x, v)
#endif