From b8bb1e02ad9a50d13e3c05d441b97e2fa6c92dc5 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 20 Nov 2019 18:04:01 +1100 Subject: [PATCH] Split access to wild and dirty from locknum to silence TSAN warnings. --- lib/dns/include/dns/rbt.h | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lib/dns/include/dns/rbt.h b/lib/dns/include/dns/rbt.h index 3e18e71c84..0a0e309160 100644 --- a/lib/dns/include/dns/rbt.h +++ b/lib/dns/include/dns/rbt.h @@ -40,11 +40,8 @@ ISC_LANG_BEGINDECLS #define DNS_RBT_USEMAGIC 1 -/* - * These should add up to 30. - */ -#define DNS_RBT_LOCKLENGTH 10 -#define DNS_RBT_REFLENGTH 20 +#define DNS_RBT_LOCKLENGTH (sizeof(((dns_rbtnode_t *)0)->locknum)*8) +#define DNS_RBT_REFLENGTH 20 #define DNS_RBTNODE_MAGIC ISC_MAGIC('R','B','N','O') #if DNS_RBT_USEMAGIC @@ -154,12 +151,12 @@ struct dns_rbtnode { * separate region of memory. */ void *data; - unsigned int :0; /* start of bitfields c/o node lock */ - unsigned int dirty:1; - unsigned int wild:1; - unsigned int locknum:DNS_RBT_LOCKLENGTH; - unsigned int :0; /* end of bitfields c/o node lock */ - isc_refcount_t references; /* note that this is not in the bitfield */ + uint8_t :0; /* start of bitfields c/o node lock */ + uint8_t dirty:1; + uint8_t wild:1; + uint8_t :0; /* end of bitfields c/o node lock */ + uint16_t locknum; /* note that this is not in the bitfield */ + isc_refcount_t references; /*@}*/ };