X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Ftrack-untrack.c;h=a4f4689e7457c226821280778aff330fdc376434;hp=9ce850468d96db65fbe228e78e682b19bcd20cef;hb=890d8fe47755c3bad936389cf48ffa141cff41c9;hpb=c51da6731061a34acbe9a63ef9ad593fa33b5847 diff --git a/src/bin/lttng/commands/track-untrack.c b/src/bin/lttng/commands/track-untrack.c index 9ce850468..a4f4689e7 100644 --- a/src/bin/lttng/commands/track-untrack.c +++ b/src/bin/lttng/commands/track-untrack.c @@ -16,7 +16,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE #define _LGPL_SOURCE #include #include @@ -26,6 +25,7 @@ #include #include #include +#include #include @@ -208,14 +208,14 @@ enum cmd_error_code track_untrack_pid(enum cmd_type cmd_type, const char *cmd_st int nr_pids; struct lttng_domain dom; struct lttng_handle *handle = NULL; - int (*lib_func)(struct lttng_handle *handle, int pid); + int (*cmd_func)(struct lttng_handle *handle, int pid); switch (cmd_type) { case CMD_TRACK: - lib_func = lttng_track_pid; + cmd_func = lttng_track_pid; break; case CMD_UNTRACK: - lib_func = lttng_untrack_pid; + cmd_func = lttng_untrack_pid; break; default: ERR("Unknown command"); @@ -229,9 +229,8 @@ enum cmd_error_code track_untrack_pid(enum cmd_type cmd_type, const char *cmd_st } else if (opt_userspace) { dom.type = LTTNG_DOMAIN_UST; } else { - print_missing_domain(); - ret = CMD_ERROR; - goto end; + /* Checked by the caller. */ + assert(0); } ret = parse_pid_string(pid_string, all, &pid_list, &nr_pids); @@ -259,11 +258,30 @@ enum cmd_error_code track_untrack_pid(enum cmd_type cmd_type, const char *cmd_st for (i = 0; i < nr_pids; i++) { DBG("%s PID %d", cmd_str, pid_list[i]); - ret = lib_func(handle, pid_list[i]); + ret = cmd_func(handle, pid_list[i]); if (ret) { - success = 0; - retval = CMD_ERROR; + switch (-ret) { + case LTTNG_ERR_PID_TRACKED: + WARN("PID %i already tracked in session %s", + pid_list[i], session_name); + success = 1; + retval = CMD_SUCCESS; + break; + case LTTNG_ERR_PID_NOT_TRACKED: + WARN("PID %i not tracked in session %s", + pid_list[i], session_name); + success = 1; + retval = CMD_SUCCESS; + break; + default: + ERR("%s", lttng_strerror(ret)); + success = 0; + retval = CMD_ERROR; + break; + } } else { + MSG("PID %i %sed in session %s", + pid_list[i], cmd_str, session_name); success = 1; } @@ -362,10 +380,9 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str, } } - if (!(opt_userspace ^ opt_kernel)) { - ERR("Exactly one of -u or -k needs to be specified."); - usage(stderr, cmd_str); - command_ret = CMD_ERROR; + ret = print_missing_or_multiple_domains(opt_kernel + opt_userspace); + if (ret) { + ret = CMD_ERROR; goto end; }