X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Ferror.c;h=84bc04facc7a5baea689d839aa0db85a0f1dfdb2;hp=d046dcba97004bb068942814c4d85a89ad5cd904;hb=62a7b8edf965b89d3ca57da120dcedfcf36dfe02;hpb=141feb8ca12d48ef5adfcda81faa7e0d2fc32c7a diff --git a/src/common/error.c b/src/common/error.c index d046dcba9..84bc04fac 100644 --- a/src/common/error.c +++ b/src/common/error.c @@ -15,18 +15,26 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE #define _LGPL_SOURCE #include #include +#include +#include #include #include +#include #include "error.h" #define ERROR_INDEX(code) (code - LTTNG_OK) +/* + * 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; + /* TLS variable that contains the time of one single log entry. */ DEFINE_URCU_TLS(struct log_time, error_log_time); @@ -170,6 +178,11 @@ static const char *error_string_array[] = { [ ERROR_INDEX(LTTNG_ERR_PID_TRACKED) ] = "PID already tracked", [ ERROR_INDEX(LTTNG_ERR_PID_NOT_TRACKED) ] = "PID not tracked", [ ERROR_INDEX(LTTNG_ERR_INVALID_CHANNEL_DOMAIN) ] = "Invalid channel domain", + [ ERROR_INDEX(LTTNG_ERR_OVERFLOW) ] = "Overflow occured", + [ ERROR_INDEX(LTTNG_ERR_SESSION_NOT_STARTED) ] = "Session not started", + [ ERROR_INDEX(LTTNG_ERR_LIVE_SESSION) ] = "Live sessions are not supported", + [ ERROR_INDEX(LTTNG_ERR_PER_PID_SESSION) ] = "Per-PID tracing sessions are not supported", + [ ERROR_INDEX(LTTNG_ERR_KERN_CONTEXT_UNAVAILABLE) ] = "Context unavailable on this kernel", /* Last element */ [ ERROR_INDEX(LTTNG_ERR_NR) ] = "Unknown error code" @@ -192,3 +205,22 @@ const char *error_get_str(int32_t code) return error_string_array[ERROR_INDEX(code)]; } + +LTTNG_HIDDEN +void lttng_abort_on_error(void) +{ + if (lttng_opt_abort_on_error < 0) { + /* Use lttng_secure_getenv() to query its state. */ + const char *value; + + value = lttng_secure_getenv("LTTNG_ABORT_ON_ERROR"); + if (value && !strcmp(value, "1")) { + lttng_opt_abort_on_error = 1; + } else { + lttng_opt_abort_on_error = 0; + } + } + if (lttng_opt_abort_on_error > 0) { + abort(); + } +}