Workaround the signed atomic operations because of Windows stdatomic.h shim
We found out that our win32 stdatomic.h shim converts all signed integers to unsigned. The proper workaround for this is to load the value into a local variable first and then use the variable instead of directly calling atomic_load()
. We need to investigate the rest of the atomic_int_*
usage in BIND 9 source code for similar errors:
lib/isc/hp.c:static atomic_int_fast32_t tid_v_base = ATOMIC_VAR_INIT(0);
lib/isc/include/isc/mutexatomic.h:typedef struct atomic_int_fast32 {
lib/isc/include/isc/mutexatomic.h:} atomic_int_fast32_t;
lib/isc/include/isc/mutexatomic.h:typedef struct atomic_int_fast64 {
lib/isc/include/isc/mutexatomic.h:} atomic_int_fast64_t;
lib/isc/include/isc/rwlock.h: atomic_int_fast32_t spins;
lib/isc/include/isc/rwlock.h: atomic_int_fast32_t write_requests;
lib/isc/include/isc/rwlock.h: atomic_int_fast32_t write_completions;
lib/isc/include/isc/rwlock.h: atomic_int_fast32_t cnt_and_flag;
lib/isc/log.c: atomic_int_fast32_t debug_level;
lib/isc/log.c: atomic_int_fast32_t highest_level;
lib/isc/netmgr/netmgr-int.h: atomic_int_fast64_t pktcount;
lib/isc/netmgr/netmgr-int.h: atomic_int_fast32_t rchildren;
lib/isc/netmgr/netmgr-int.h: atomic_int_fast32_t ah;
lib/isc/stats.c:typedef atomic_int_fast32_t isc__atomic_statcounter_t;
lib/isc/stats.c:typedef atomic_int_fast64_t isc__atomic_statcounter_t;
lib/isc/tests/task_test.c:atomic_int_fast32_t counter;
lib/isc/tests/task_test.c: atomic_int_fast32_t *value = (atomic_int_fast32_t *)event->ev_arg;
lib/isc/tests/task_test.c: atomic_int_fast32_t *value = (atomic_int_fast32_t *)event->ev_arg;
lib/isc/tests/task_test.c: atomic_int_fast32_t a, b;
lib/isc/tests/task_test.c: atomic_int_fast32_t a, b, c, d, e;
lib/isc/tests/task_test.c: atomic_int_fast32_t a, b, c, d, e; /* non valid states */
lib/isc/tests/timer_test.c:static atomic_int_fast32_t eventcnt;