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.
<acronym>BIND</acronym> 8 statistics, if applicable.
</para>
+ <para>
+ 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.
+ </para>
+
<section xml:id="stats_counters"><info><title>Name Server Statistics Counters</title></info>
<informaltable colsep="0" rowsep="0">
#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;