#include <lttng/lttng-error.h>
#include <inttypes.h>
+#include <iostream>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
+namespace {
/*
* lttng_opt_abort_on_error: unset: -1, disabled: 0, enabled: 1.
* Controlled by the LTTNG_ABORT_ON_ERROR environment variable.
*/
-static int lttng_opt_abort_on_error = -1;
+int lttng_opt_abort_on_error = -1;
/* TLS variable that contains the time of one single log entry. */
-DEFINE_URCU_TLS(struct log_time, error_log_time);
-DEFINE_URCU_TLS(const char *, logger_thread_name);
+thread_local struct log_time error_log_time;
+} /* namespace */
-const char *log_add_time(void)
+thread_local const char *logger_thread_name;
+
+const char *log_add_time()
{
int ret;
struct tm tm, *res;
}
/* Format time in the TLS variable. */
- ret = snprintf(URCU_TLS(error_log_time).str,
- sizeof(URCU_TLS(error_log_time).str),
+ ret = snprintf(error_log_time.str,
+ sizeof(error_log_time.str),
"%02d:%02d:%02d.%09ld",
tm.tm_hour,
tm.tm_min,
}
errno = errsv;
- return URCU_TLS(error_log_time).str;
+ return error_log_time.str;
error:
/* Return an empty string on error so logging is not affected. */
int ret;
LTTNG_ASSERT(name);
- URCU_TLS(logger_thread_name) = name;
+ logger_thread_name = name;
if (set_pthread_name) {
ret = lttng_thread_setname(name);
abort();
}
}
+
+[[noreturn]] void
+lttng::logging::details::die_formatting_exception(const char *format,
+ const std::exception& formatting_exception)
+{
+ std::cerr << "Error occurred while formatting logging message: msg=`" << format
+ << "`: " << formatting_exception.what();
+ abort();
+}