X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Ferror.c;h=84bc04facc7a5baea689d839aa0db85a0f1dfdb2;hp=852de6fb4cf0c3fc7b0dc33c19164ced148c5be4;hb=9bbd8e06acdcc06e6a6b22670c79a4da3e793f70;hpb=45d5d421f3464b541315509ecc2295be81b7139d diff --git a/src/common/error.c b/src/common/error.c index 852de6fb4..84bc04fac 100644 --- a/src/common/error.c +++ b/src/common/error.c @@ -15,17 +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); @@ -156,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", @@ -165,6 +174,15 @@ static const char *error_string_array[] = { [ ERROR_INDEX(LTTNG_ERR_MI_IO_FAIL) ] = "IO error while writing MI output", [ ERROR_INDEX(LTTNG_ERR_MI_NOT_IMPLEMENTED) ] = "Mi feature not implemented", [ ERROR_INDEX(LTTNG_ERR_INVALID_EVENT_NAME) ] = "Invalid event name", + [ 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" @@ -187,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(); + } +}