From ecebc263f5b03550e27df0d1068340b61621fa93 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Tue, 24 Nov 2020 23:35:08 +0100 Subject: [PATCH] Revert "util: Add helpers for various one-time-init patters" This reverts commit bda4d6e0d01116db59a0a03b0c703a7af6e11949. Acked-by: Rob Clark Part-of: --- src/util/debug.h | 61 ---------------------------------------------- src/util/u_debug.h | 33 +++++++++++++++++++++---- 2 files changed, 28 insertions(+), 66 deletions(-) diff --git a/src/util/debug.h b/src/util/debug.h index e6a53e2fdec..bbcc1975545 100644 --- a/src/util/debug.h +++ b/src/util/debug.h @@ -27,8 +27,6 @@ #include #include -#include "util/simple_mtx.h" - #ifdef __cplusplus extern "C" { #endif @@ -52,63 +50,4 @@ env_var_as_unsigned(const char *var_name, unsigned default_value); } /* extern C */ #endif -/** - * Helper for arbitrary one-time initialization, with additional locking - * to ensure the initialization only happens once (and to make tools like - * helgrind happy). - */ -#define do_once for( \ - struct __do_once_data *__d = ({ \ - static struct __do_once_data __sd = { \ - .lock = _SIMPLE_MTX_INITIALIZER_NP, \ - .done = false, \ - }; \ - simple_mtx_lock(&__sd.lock); \ - &__sd; \ - }); \ - ({ \ - if (__d->done) \ - simple_mtx_unlock(&__d->lock); \ - !__d->done; \ - }); \ - __d->done = true) - -struct __do_once_data { - simple_mtx_t lock; - bool done; -}; - -/** - * Helper for one-time debug value from env-var, and other similar cases, - * where the expression is expected to return the same value each time. - * - * This has additional locking, compared to open-coding the initialization, - * to make tools like helgrind happy. - */ -#define get_once(__expr) ({ \ - static __typeof__(__expr) __val; \ - do_once { \ - __val = __expr; \ - } \ - __val; \ - }) - -/** - * Alternative version of get_once() which has no locking in release builds, - * suitable for hot-paths. - */ -#ifndef NDEBUG -#define get_once_nolock(__expr) ({ \ - static bool __once; \ - static __typeof__(__expr) __val; \ - if (!__once) { \ - __val = __expr; \ - __once = true; \ - } \ - __val; \ - }) -#else -#define get_once_nolock(__expr) get_once(__expr) -#endif - #endif /* _UTIL_DEBUG_H */ diff --git a/src/util/u_debug.h b/src/util/u_debug.h index d4f77c61251..fc06c582b0d 100644 --- a/src/util/u_debug.h +++ b/src/util/u_debug.h @@ -40,7 +40,6 @@ #include #include -#include "util/debug.h" #include "util/os_misc.h" #include "util/detect_os.h" #include "util/macros.h" @@ -408,28 +407,52 @@ debug_get_flags_option(const char *name, static const char * \ debug_get_option_ ## suffix (void) \ { \ - return get_once_nolock(debug_get_option(name, dfault)); \ + static bool first = true; \ + static const char * value; \ + if (first) { \ + first = false; \ + value = debug_get_option(name, dfault); \ + } \ + return value; \ } #define DEBUG_GET_ONCE_BOOL_OPTION(sufix, name, dfault) \ static bool \ debug_get_option_ ## sufix (void) \ { \ - return get_once_nolock(debug_get_bool_option(name, dfault)); \ + static bool first = true; \ + static bool value; \ + if (first) { \ + first = false; \ + value = debug_get_bool_option(name, dfault); \ + } \ + return value; \ } #define DEBUG_GET_ONCE_NUM_OPTION(sufix, name, dfault) \ static long \ debug_get_option_ ## sufix (void) \ { \ - return get_once_nolock(debug_get_num_option(name, dfault)); \ + static bool first = true; \ + static long value; \ + if (first) { \ + first = false; \ + value = debug_get_num_option(name, dfault); \ + } \ + return value; \ } #define DEBUG_GET_ONCE_FLAGS_OPTION(sufix, name, flags, dfault) \ static unsigned long \ debug_get_option_ ## sufix (void) \ { \ - return get_once_nolock(debug_get_flags_option(name, flags, dfault)); \ + static bool first = true; \ + static unsigned long value; \ + if (first) { \ + first = false; \ + value = debug_get_flags_option(name, flags, dfault); \ + } \ + return value; \ }