X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=src%2Fcommon%2Flogging.c;h=39b515ff9a9368f4c6b19cc4fd186b5b237954b7;hb=9ff107a9504abe331c714a0301f0f4726f01cf41;hp=fb3f119fcbba3c34e32e6741c6686c17f33ed6a3;hpb=2722f20cbda88b5f6250213a7be8412c19a11e8a;p=lttng-ust.git diff --git a/src/common/logging.c b/src/common/logging.c index fb3f119f..39b515ff 100644 --- a/src/common/logging.c +++ b/src/common/logging.c @@ -10,19 +10,18 @@ #include "common/logging.h" int lttng_ust_log_level = LTTNG_UST_LOG_LEVEL_UNKNOWN; +int lttng_ust_log_critical_action = LTTNG_UST_LOG_CRITICAL_ACTION_UNKNOWN; /* * Initialize the global log level from the "LTTNG_UST_DEBUG" environment * variable. * - * This could end up being called concurently by multiple threads but doesn't + * This could end up being called concurrently by multiple threads but doesn't * require a mutex since the input is invariant across threads and the result * will be the same. - * - * Return the current log level to save the caller a second read of the global - * log level. */ -int lttng_ust_logging_init(void) +static +void lttng_ust_logging_log_level_init(void) { char *lttng_ust_debug; int current_log_level; @@ -31,10 +30,10 @@ int lttng_ust_logging_init(void) /* * Check early if we are initialized, this is unlikely as it's already tested - * in lttng_ust_debug_enabled before performing lazy initialization. + * in lttng_ust_logging_debug_enabled before performing lazy initialization. */ if (caa_unlikely(current_log_level != LTTNG_UST_LOG_LEVEL_UNKNOWN)) - goto end; + return; /* * This getenv is not part of lttng_ust_getenv() because logging is @@ -54,7 +53,61 @@ int lttng_ust_logging_init(void) /* Initialize the log level */ CMM_STORE_SHARED(lttng_ust_log_level, current_log_level); +} + +/* + * Initialize the global log critical action from the "LTTNG_UST_ABORT_ON_CRITICAL" + * environment variable. + * + * This could end up being called concurrently by multiple threads but doesn't + * require a mutex since the input is invariant across threads and the result + * will be the same. + */ +static +void lttng_ust_logging_log_critical_action_init(void) +{ + char *lttng_ust_abort_on_critical; + int current_log_critical_action; -end: - return current_log_level; + current_log_critical_action = CMM_LOAD_SHARED(lttng_ust_log_critical_action); + + /* + * Check early if we are initialized, this is unlikely as it's already tested + * in lttng_ust_logging_abort_on_critical_enabled before performing lazy initialization. + */ + if (caa_unlikely(current_log_critical_action != LTTNG_UST_LOG_CRITICAL_ACTION_UNKNOWN)) + return; + + /* + * This getenv is not part of lttng_ust_getenv() because logging is + * used in the getenv initialization and thus logging must be + * initialized prior to getenv. + */ + lttng_ust_abort_on_critical = getenv("LTTNG_UST_ABORT_ON_CRITICAL"); + + /* + * If the LTTNG_UST_ABORT_ON_CRITICAL environment variable is defined, + * call abort() on CRIT(), otherwise take no action. + */ + if (lttng_ust_abort_on_critical) + current_log_critical_action = LTTNG_UST_LOG_CRITICAL_ACTION_ABORT; + else + current_log_critical_action = LTTNG_UST_LOG_CRITICAL_ACTION_NONE; + + /* Initialize the log critical action */ + CMM_STORE_SHARED(lttng_ust_log_critical_action, current_log_critical_action); +} + +/* + * Initialize the global log level from the "LTTNG_UST_DEBUG" environment + * variable and the global log critical action from "LTTNG_UST_ABORT_ON_CRITICAL". + * + * This could end up being called concurrently by multiple threads but doesn't + * require a mutex since the input is invariant across threads and the result + * will be the same. + */ +void lttng_ust_logging_init(void) +{ + lttng_ust_logging_log_level_init(); + lttng_ust_logging_log_critical_action_init(); }