WARNING: ThreadSanitizer: data race
Write of size 4 at 0x000000000001 by thread T1 (mutexes: write M1):
#0 dns_stats_detach lib/dns/stats.c:115:19
#1 destroy lib/dns/view.c:527:3
#2 dns_view_weakdetach lib/dns/view.c:704:3
#3 zone_free lib/dns/zone.c:1149:3
#4 zone_shutdown lib/dns/zone.c:13123:3
#5 dispatch lib/isc/task.c:1157:7
#6 run lib/isc/task.c:1331:2
Previous read of size 4 at 0x000000000001 by thread T2:
#0 dns_stats_detach lib/dns/stats.c:118:13
#1 destroy lib/dns/view.c:527:3
#2 dns_view_weakdetach lib/dns/view.c:704:3
#3 zone_free lib/dns/zone.c:1152:3
#4 zone_shutdown lib/dns/zone.c:13123:3
#5 dispatch lib/isc/task.c:1157:7
#6 run lib/isc/task.c:1331:2
void
dns_stats_detach(dns_stats_t **statsp) {
+ unsigned int references;
dns_stats_t *stats;
REQUIRE(statsp != NULL && DNS_STATS_VALID(*statsp));
*statsp = NULL;
LOCK(&stats->lock);
- stats->references--;
+ references = --stats->references;
UNLOCK(&stats->lock);
- if (stats->references == 0) {
+ if (references == 0) {
isc_stats_detach(&stats->counters);
DESTROYLOCK(&stats->lock);
isc_mem_putanddetach(&stats->mctx, stats, sizeof(*stats));