+5020. [func] RNG uses thread-local storage instead of locks, if
+ supported by platform. [GL #496]
+
5019. [cleanup] A message is now logged when ixfr-from-differences is
set at zone level for an inline-signed zone. [GL #470]
void
dns_test_end(void) {
+ cleanup_managers();
+
if (dst_active) {
dst_lib_destroy();
dst_active = false;
}
- cleanup_managers();
-
if (lctx != NULL)
isc_log_destroy(&lctx);
if (mctx != NULL)
isc_mem_destroy(&mctx);
+
}
/*
*/
#include "xoshiro128starstar.c"
+#if defined(HAVE_TLS)
+#if defined(HAVE_THREAD_LOCAL)
+static thread_local isc_once_t isc_random_once = ISC_ONCE_INIT;
+#elif defined(HAVE___THREAD)
+static __thread isc_once_t isc_random_once = ISC_ONCE_INIT;
+#else
+#error "Unknown method for defining a TLS variable!"
+#endif
+#else
static isc_once_t isc_random_once = ISC_ONCE_INIT;
+#endif
static void
isc_random_initialize(void) {
#if FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
memset(seed, 0, sizeof(seed));
#else
- isc_entropy_get(seed, sizeof(seed));
+ int useed[4] = {0,0,0,0};
+ isc_entropy_get(useed, sizeof(useed));
+ memcpy(seed, useed, sizeof(seed));
#endif
}
*
* The state must be seeded so that it is not everywhere zero.
*/
+#if defined(HAVE_TLS)
+#define _LOCK() {};
+#define _UNLOCK() {};
+
+#if defined(HAVE_THREAD_LOCAL)
+static thread_local uint32_t seed[4];
+#elif defined(HAVE___THREAD)
+static __thread uint32_t seed[4];
+#else
+#error "Unknown method for defining a TLS variable!"
+#endif
+
+#else
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
static volatile HANDLE _mutex = NULL;
#define _UNLOCK() pthread_mutex_unlock(&_mutex)
#endif /* defined(_WIN32) || defined(_WIN64) */
+static uint32_t seed[4];
+
+#endif /* defined(HAVE_TLS) */
+
static inline uint32_t rotl(const uint32_t x, int k) {
return (x << k) | (x >> (32 - k));
}
-static uint32_t seed[4];
-
static inline uint32_t
next(void) {
uint32_t result_starstar, t;
void
ns_test_end(void) {
+ cleanup_managers();
+
if (dst_active) {
dst_lib_destroy();
dst_active = false;
}
- cleanup_managers();
-
if (lctx != NULL)
isc_log_destroy(&lctx);