diff --git a/src/nm-logging.c b/src/nm-logging.c index 935b34a8e..a2581add2 100644 --- a/src/nm-logging.c +++ b/src/nm-logging.c @@ -98,10 +98,15 @@ typedef struct { LogFormatFlags log_format_level; } LogLevelDesc; +NMLogDomain _nm_logging_enabled_state[_LOGL_N_REAL] = { + /* nm_logging_setup ("INFO", LOGD_DEFAULT_STRING, NULL, NULL); */ + [LOGL_INFO] = LOGD_DEFAULT, + [LOGL_WARN] = LOGD_DEFAULT, + [LOGL_ERR] = LOGD_DEFAULT, +}; + static struct { NMLogLevel log_level; - NMLogDomain logging[_LOGL_N_REAL]; - gboolean logging_set_up; LogFormatFlags log_format_flags; enum { LOG_BACKEND_GLIB, @@ -116,6 +121,7 @@ static struct { * but that feature doesn't seem well supported. */ const LogDesc domain_desc[_DOMAIN_DESC_LEN]; } global = { + /* nm_logging_setup ("INFO", LOGD_DEFAULT_STRING, NULL, NULL); */ .log_level = LOGL_INFO, .log_backend = LOG_BACKEND_GLIB, .log_format_flags = _LOG_FORMAT_FLAG_DEFAULT, @@ -185,19 +191,6 @@ static char *_domains_to_string (gboolean include_level_override); /************************************************************************/ -static void -_ensure_initialized (void) -{ - if (G_UNLIKELY (!global.logging_set_up)) { - int errsv = errno; - - nm_logging_setup ("INFO", LOGD_DEFAULT_STRING, NULL, NULL); - - /* must ensure that errno is not modified. */ - errno = errsv; - } -} - static gboolean match_log_level (const char *level, NMLogLevel *out_level, @@ -224,7 +217,7 @@ nm_logging_setup (const char *level, GError **error) { GString *unrecognized = NULL; - NMLogDomain new_logging[G_N_ELEMENTS (global.logging)]; + NMLogDomain new_logging[G_N_ELEMENTS (_nm_logging_enabled_state)]; NMLogLevel new_log_level = global.log_level; char **tmp, **iter; int i; @@ -235,13 +228,8 @@ nm_logging_setup (const char *level, g_return_val_if_fail (!error || !*error, FALSE); /* domains */ - if (!domains || !*domains) { - domains = global.logging_set_up - ? (domains_free = _domains_to_string (FALSE)) - : LOGD_DEFAULT_STRING; - } - - global.logging_set_up = TRUE; + if (!domains || !*domains) + domains = (domains_free = _domains_to_string (FALSE)); for (i = 0; i < G_N_ELEMENTS (new_logging); i++) new_logging[i] = 0; @@ -253,7 +241,7 @@ nm_logging_setup (const char *level, if (new_log_level == _LOGL_KEEP) { new_log_level = global.log_level; for (i = 0; i < G_N_ELEMENTS (new_logging); i++) - new_logging[i] = global.logging[i]; + new_logging[i] = _nm_logging_enabled_state[i]; } } @@ -321,7 +309,7 @@ nm_logging_setup (const char *level, if (domain_log_level == _LOGL_KEEP) { for (i = 0; i < G_N_ELEMENTS (new_logging); i++) - new_logging[i] = (new_logging[i] & ~bits) | (global.logging[i] & bits); + new_logging[i] = (new_logging[i] & ~bits) | (_nm_logging_enabled_state[i] & bits); } else { for (i = 0; i < G_N_ELEMENTS (new_logging); i++) { if (i < domain_log_level) @@ -339,7 +327,7 @@ nm_logging_setup (const char *level, global.log_level = new_log_level; for (i = 0; i < G_N_ELEMENTS (new_logging); i++) - global.logging[i] = new_logging[i]; + _nm_logging_enabled_state[i] = new_logging[i]; if ( had_platform_debug && _nm_logging_clear_platform_logging_cache @@ -384,8 +372,6 @@ nm_logging_all_levels_to_string (void) const char * nm_logging_domains_to_string (void) { - _ensure_initialized (); - if (G_UNLIKELY (!global.logging_domains_to_string)) global.logging_domains_to_string = _domains_to_string (TRUE); @@ -406,7 +392,7 @@ _domains_to_string (gboolean include_level_override) str = g_string_sized_new (75); for (diter = &global.domain_desc[0]; diter->name; diter++) { /* If it's set for any lower level, it will also be set for LOGL_ERR */ - if (!(diter->num & global.logging[LOGL_ERR])) + if (!(diter->num & _nm_logging_enabled_state[LOGL_ERR])) continue; if (str->len) @@ -418,15 +404,15 @@ _domains_to_string (gboolean include_level_override) /* Check if it's logging at a lower level than the default. */ for (i = 0; i < global.log_level; i++) { - if (diter->num & global.logging[i]) { + if (diter->num & _nm_logging_enabled_state[i]) { g_string_append_printf (str, ":%s", global.level_desc[i].name); break; } } /* Check if it's logging at a higher level than the default. */ - if (!(diter->num & global.logging[global.log_level])) { - for (i = global.log_level + 1; i < G_N_ELEMENTS (global.logging); i++) { - if (diter->num & global.logging[i]) { + if (!(diter->num & _nm_logging_enabled_state[global.log_level])) { + for (i = global.log_level + 1; i < G_N_ELEMENTS (_nm_logging_enabled_state); i++) { + if (diter->num & _nm_logging_enabled_state[i]) { g_string_append_printf (str, ":%s", global.level_desc[i].name); break; } @@ -459,18 +445,6 @@ nm_logging_all_domains_to_string (void) return str->str; } -gboolean -nm_logging_enabled (NMLogLevel level, NMLogDomain domain) -{ - if ((guint) level >= G_N_ELEMENTS (global.logging)) - g_return_val_if_reached (FALSE); - - /* This function is guaranteed not to modify errno. */ - _ensure_initialized (); - - return !!(global.logging[level] & domain); -} - #if SYSTEMD_JOURNAL __attribute__((__format__ (__printf__, 4, 5))) static void @@ -515,12 +489,10 @@ _nm_log_impl (const char *file, char s_buf_location[1024]; GTimeVal tv; - if ((guint) level >= G_N_ELEMENTS (global.logging)) + if ((guint) level >= G_N_ELEMENTS (_nm_logging_enabled_state)) g_return_if_reached (); - _ensure_initialized (); - - if (!(global.logging[level] & domain)) + if (!(_nm_logging_enabled_state[level] & domain)) return; /* Make sure that %m maps to the specified error */ @@ -609,7 +581,7 @@ _nm_log_impl (const char *file, const char *s_domain_1 = NULL; GString *s_domain_all = NULL; NMLogDomain dom_all = domain; - NMLogDomain dom = dom_all & global.logging[level]; + NMLogDomain dom = dom_all & _nm_logging_enabled_state[level]; for (diter = &global.domain_desc[0]; diter->name; diter++) { if (!NM_FLAGS_HAS (dom_all, diter->num)) diff --git a/src/nm-logging.h b/src/nm-logging.h index 27f89f5d5..c13467050 100644 --- a/src/nm-logging.h +++ b/src/nm-logging.h @@ -158,7 +158,14 @@ void _nm_log_impl (const char *file, const char *nm_logging_level_to_string (void); const char *nm_logging_domains_to_string (void); -gboolean nm_logging_enabled (NMLogLevel level, NMLogDomain domain); + +extern NMLogDomain _nm_logging_enabled_state[_LOGL_N_REAL]; +static inline gboolean +nm_logging_enabled (NMLogLevel level, NMLogDomain domain) +{ + nm_assert (((guint) level) < G_N_ELEMENTS (_nm_logging_enabled_state)); + return !!(_nm_logging_enabled_state[level] & domain); +} const char *nm_logging_all_levels_to_string (void); const char *nm_logging_all_domains_to_string (void);