From 705de2e71488998329302e931004e75cd9a7451e Mon Sep 17 00:00:00 2001 From: Aaron Andersen Date: Mon, 10 Nov 2025 10:06:54 -0500 Subject: [PATCH] glog: guard NO_COLOR environment variable check with a GOnce for performance reasons --- glib/gmessages.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/glib/gmessages.c b/glib/gmessages.c index 01555356d..47367d601 100644 --- a/glib/gmessages.c +++ b/glib/gmessages.c @@ -2712,10 +2712,10 @@ g_log_writer_standard_streams (GLogLevelFlags log_level, gsize n_fields, gpointer user_data) { - gboolean use_color; + static gboolean use_color; + static size_t use_color_init = 0; FILE *stream; char *out; - const char *no_color_env; g_return_val_if_fail (fields != NULL, G_LOG_WRITER_UNHANDLED); g_return_val_if_fail (n_fields > 0, G_LOG_WRITER_UNHANDLED); @@ -2724,12 +2724,17 @@ g_log_writer_standard_streams (GLogLevelFlags log_level, if (!stream || fileno (stream) < 0) return G_LOG_WRITER_UNHANDLED; - /* Honor NO_COLOR environment variable (https://no-color.org) */ - no_color_env = g_getenv ("NO_COLOR"); - if (no_color_env && *no_color_env != '\0') - use_color = FALSE; - else - use_color = g_log_writer_supports_color (fileno (stream)); + if (g_once_init_enter (&use_color_init)) + { + /* Honor NO_COLOR environment variable (https://no-color.org) */ + const char *no_color_env = g_getenv ("NO_COLOR"); + if (no_color_env && *no_color_env != '\0') + use_color = FALSE; + else + use_color = g_log_writer_supports_color (fileno (stream)); + + g_once_init_leave (&use_color_init, 1); + } out = log_writer_format_fields_utf8 (log_level, fields, n_fields, use_color, TRUE);