*/
#define _LGPL_SOURCE
+#include "error.hpp"
+
+#include <common/common.hpp>
+#include <common/compat/errno.hpp>
+#include <common/compat/getenv.hpp>
+#include <common/thread.hpp>
+
+#include <lttng/lttng-error.h>
+
#include <inttypes.h>
+#include <iostream>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
-#include <common/common.h>
-#include <common/thread.h>
-#include <common/compat/errno.h>
-#include <common/compat/getenv.h>
-#include <lttng/lttng-error.h>
-
-#include "error.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 */
+
+thread_local const char *logger_thread_name;
-const char *log_add_time(void)
+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),
- "%02d:%02d:%02d.%09ld",
- tm.tm_hour, tm.tm_min, tm.tm_sec, tp.tv_nsec);
+ ret = snprintf(error_log_time.str,
+ sizeof(error_log_time.str),
+ "%02d:%02d:%02d.%09ld",
+ tm.tm_hour,
+ tm.tm_min,
+ tm.tm_sec,
+ tp.tv_nsec);
if (ret < 0) {
goto error;
}
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);
/*
* Human readable error message.
*/
-static
-const char *lttng_error_code_str(lttng_error_code code)
+static const char *lttng_error_code_str(lttng_error_code code)
{
switch (code) {
case LTTNG_OK:
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();
+}