-
The .is_overmem member of isc_mem_t structure is intentionally accessed unlocked as 100% accuracy isn't necessary here. Without the attribute, following TSAN warning would show up: WARNING: ThreadSanitizer: data race Write of size 1 at 0x000000000001 by thread T1 (mutexes: write M1, write M2): #0 isc___mem_put lib/isc/mem.c:1119:19 #1 isc__mem_put lib/isc/mem.c:2439:2 #2 dns_rdataslab_fromrdataset lib/dns/rdataslab.c:327:2 #3 addrdataset lib/dns/rbtdb.c:6761:11 #4 dns_db_addrdataset lib/dns/db.c:719:10 #5 cache_name lib/dns/resolver.c:6538:13 #6 cache_message lib/dns/resolver.c:6628:14 #7 resquery_response lib/dns/resolver.c:7883:13 #8 dispatch lib/isc/task.c:1152:7 #9 run lib/isc/task.c:1344:2 Previous read of size 1 at 0x000000000001 by thread T2 (mutexes: write M3): #0 isc_mem_isovermem lib/isc/mem.c:1553:15 #1 addrdataset lib/dns/rbtdb.c:6866:25 #2 dns_db_addrdataset lib/dns/db.c:719:10 #3 addoptout lib/dns/ncache.c:281:10 #4 dns_ncache_add lib/dns/ncache.c:101:10 #5 ncache_adderesult lib/dns/resolver.c:6668:12 #6 ncache_message lib/dns/resolver.c:6845:11 #7 rctx_ncache lib/dns/resolver.c:9174:11 #8 resquery_response lib/dns/resolver.c:7894:2 #9 dispatch lib/isc/task.c:1152:7 #10 run lib/isc/task.c:1344:2 Location is heap block of size 328 at 0x000000000020 allocated by thread T3: #0 malloc <null> #1 default_memalloc lib/isc/mem.c:713:8 #2 mem_create lib/isc/mem.c:763:8 #3 isc_mem_create lib/isc/mem.c:2425:2 #4 configure_view bin/named/server.c:4494:4 #5 load_configuration bin/named/server.c:9062:3 #6 run_server bin/named/server.c:9771:2 #7 dispatch lib/isc/task.c:1152:7 #8 run lib/isc/task.c:1344:2 [...] SUMMARY: ThreadSanitizer: data race lib/isc/mem.c:1119:19 in isc___mem_put
0110d1ab