diff --git a/src/mapi/table.c b/src/mapi/table.c index 748750197c6..b0dd51f8622 100644 --- a/src/mapi/table.c +++ b/src/mapi/table.c @@ -25,9 +25,12 @@ * Chia-I Wu */ +#include #include #include +#include +#include "c11/threads.h" #include "table.h" static nop_handler_proc nop_handler = NULL; @@ -38,6 +41,17 @@ table_set_noop_handler(nop_handler_proc func) nop_handler = func; } +static bool log_noop; + +static void check_debug_env(void) +{ + const char *debug = getenv("MESA_DEBUG"); + if (!debug) + debug = getenv("LIBGL_DEBUG"); + if (debug && strcmp(debug, "silent") != 0) + log_noop = true; +} + static void noop_warn(const char *name) { @@ -45,12 +59,10 @@ noop_warn(const char *name) nop_handler(name); } else { - static int debug = -1; - - if (debug < 0) - debug = (getenv("MESA_DEBUG") || getenv("LIBGL_DEBUG")); + static once_flag flag = ONCE_FLAG_INIT; + call_once(&flag, check_debug_env); - if (debug) + if (log_noop) fprintf(stderr, "%s is no-op\n", name); } }