From: Ondřej Surý Date: Wed, 26 Nov 2025 16:10:37 +0000 (+0100) Subject: Use atomics for CMM_{LOAD,STORE}_SHARED with ThreadSanitizer X-Git-Tag: v9.21.16~30^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=539be61b680572beb555e10f36e0b2c16caade50;p=thirdparty%2Fbind9.git 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. --- diff --git a/lib/isc/include/isc/urcu.h b/lib/isc/include/isc/urcu.h index e2ed8557590..fc34fcf2653 100644 --- a/lib/isc/include/isc/urcu.h +++ b/lib/isc/include/isc/urcu.h @@ -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