X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Ferror.c;h=84bc04facc7a5baea689d839aa0db85a0f1dfdb2;hp=ad0ac51d4a5ad1af4611f1667a138e05b875c535;hb=9bbd8e06acdcc06e6a6b22670c79a4da3e793f70;hpb=b93a4a13a2724a73069e1d661df5df83c629bb36 diff --git a/src/common/error.c b/src/common/error.c index ad0ac51d4..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); @@ -157,7 +165,7 @@ static const char *error_string_array[] = { [ ERROR_INDEX(LTTNG_ERR_NO_CHANNEL) ] = "No channel found in the session", [ ERROR_INDEX(LTTNG_ERR_SESSION_INVALID_CHAR) ] = "Invalid character found in session name", [ ERROR_INDEX(LTTNG_ERR_SAVE_FILE_EXIST) ] = "Session file already exists", - [ ERROR_INDEX(LTTNG_ERR_SAVE_IO_FAIL) ] = "IO error while writting session configuration", + [ ERROR_INDEX(LTTNG_ERR_SAVE_IO_FAIL) ] = "IO error while writing session configuration", [ ERROR_INDEX(LTTNG_ERR_LOAD_INVALID_CONFIG) ] = "Invalid session configuration", [ ERROR_INDEX(LTTNG_ERR_LOAD_IO_FAIL) ] = "IO error while reading a session configuration", [ ERROR_INDEX(LTTNG_ERR_LOAD_SESSION_NOENT) ] = "Session file not found", @@ -169,6 +177,12 @@ static const char *error_string_array[] = { [ ERROR_INDEX(LTTNG_ERR_INVALID_CHANNEL_NAME) ] = "Invalid channel name", [ 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" @@ -191,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(); + } +}