Mesa (master): Revert "util: Add helpers for various one-time-init patters"
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Nov 25 10:06:38 UTC 2020
Module: Mesa
Branch: master
Commit: ecebc263f5b03550e27df0d1068340b61621fa93
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ecebc263f5b03550e27df0d1068340b61621fa93
Author: Erik Faye-Lund <erik.faye-lund at collabora.com>
Date: Tue Nov 24 23:35:08 2020 +0100
Revert "util: Add helpers for various one-time-init patters"
This reverts commit bda4d6e0d01116db59a0a03b0c703a7af6e11949.
Acked-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7760>
---
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 <stdint.h>
#include <stdbool.h>
-#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 <stdarg.h>
#include <string.h>
-#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; \
}
More information about the mesa-commit
mailing list