Build fix: workaround g++ 4.8 decltype handling bug
[lttng-tools.git] / src / common / error.cpp
index ab09053ccfb1465179139187069e73954a0b6f97..26d69f48b2f9130e15ba13e9fb54764067e9cfb0 100644 (file)
 #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;
@@ -50,8 +54,8 @@ const char *log_add_time(void)
        }
 
        /* 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,
@@ -62,7 +66,7 @@ const char *log_add_time(void)
        }
 
        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. */
@@ -75,7 +79,7 @@ void logger_set_thread_name(const char *name, bool set_pthread_name)
        int ret;
 
        LTTNG_ASSERT(name);
-       URCU_TLS(logger_thread_name) = name;
+       logger_thread_name = name;
 
        if (set_pthread_name) {
                ret = lttng_thread_setname(name);
@@ -449,3 +453,12 @@ void lttng_abort_on_error(void)
                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();
+}
This page took 0.023996 seconds and 4 git commands to generate.