From de65b8f0f8f94c70431053bb4e047c4294ea7143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Fri, 7 Jun 2019 15:21:43 +0200 Subject: [PATCH] Fix statistics for x86 Windows builds Using atomic_int_fast64_t variables with atomic functions on x86 does not cause Visual Studio to report build errors, but such operations yield useless results. Since the isc_stat_t type is unconditionally typedef'd to atomic_int_fast64_t, any code performing atomic operations on isc_stat_t variables is broken in x86 Windows builds. Fix by using the atomic_int_fast32_t type for isc_stat_t in x86 Windows builds. (cherry picked from commit e21103f2d37d339886b09387b08239c838d50ef1) --- doc/arm/Bv9ARM-book.xml | 9 +++++++++ lib/isc/stats.c | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/doc/arm/Bv9ARM-book.xml b/doc/arm/Bv9ARM-book.xml index d012f4c97b..d2e672d431 100644 --- a/doc/arm/Bv9ARM-book.xml +++ b/doc/arm/Bv9ARM-book.xml @@ -15358,6 +15358,15 @@ HOST-127.EXAMPLE. MX 0 . BIND 8 statistics, if applicable. + + Note: BIND statistics counters are signed 64-bit values on + all platforms except one: 32-bit Windows, where they are + signed 32-bit values. Given that 32-bit values have a + vastly smaller range than 64-bit values, BIND statistics + counters in 32-bit Windows builds overflow significantly + more quickly than on all other platforms. + +
Name Server Statistics Counters diff --git a/lib/isc/stats.c b/lib/isc/stats.c index bbdb1f91ea..9a0e2f10ed 100644 --- a/lib/isc/stats.c +++ b/lib/isc/stats.c @@ -30,7 +30,11 @@ #define ISC_STATS_MAGIC ISC_MAGIC('S', 't', 'a', 't') #define ISC_STATS_VALID(x) ISC_MAGIC_VALID(x, ISC_STATS_MAGIC) +#if defined(_WIN32) && !defined(_WIN64) +typedef atomic_int_fast32_t isc_stat_t; +#else typedef atomic_int_fast64_t isc_stat_t; +#endif struct isc_stats { unsigned int magic;