*/
static int enable_events(char *session_name)
{
- int err, ret = CMD_SUCCESS;
+ int err, ret = CMD_SUCCESS, warn = 0;
char *event_name, *channel_name = NULL;
struct lttng_event ev;
struct lttng_domain dom;
- if (opt_channel_name == NULL) {
- err = asprintf(&channel_name, DEFAULT_CHANNEL_NAME);
- if (err < 0) {
- ret = CMD_FATAL;
- goto error;
- }
- } else {
- channel_name = opt_channel_name;
- }
-
- if (opt_kernel && opt_userspace) {
- ERR("Can't use -k/--kernel and -u/--userspace together");
- ret = CMD_FATAL;
- goto error;
- }
-
/* Create lttng domain */
if (opt_kernel) {
dom.type = LTTNG_DOMAIN_KERNEL;
goto error;
}
+ if (opt_channel_name == NULL) {
+ err = asprintf(&channel_name, DEFAULT_CHANNEL_NAME);
+ if (err < 0) {
+ ret = CMD_FATAL;
+ goto error;
+ }
+ } else {
+ channel_name = opt_channel_name;
+ }
+
handle = lttng_create_handle(session_name, &dom);
if (handle == NULL) {
ret = -1;
if (opt_enable_all) {
/* Default setup for enable all */
-
if (opt_kernel) {
ev.type = opt_event_type;
ev.name[0] = '\0';
goto error;
}
- if (opt_loglevel[0] != '\0') {
+ if (opt_loglevel) {
MSG("Kernel loglevels are not supported.");
ret = CMD_UNDEFINED;
goto error;
}
ev.loglevel_type = opt_loglevel_type;
- strncpy(ev.loglevel, opt_loglevel, LTTNG_SYMBOL_NAME_LEN);
- ev.loglevel[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
+ if (opt_loglevel) {
+ strncpy(ev.loglevel, opt_loglevel, LTTNG_SYMBOL_NAME_LEN);
+ ev.loglevel[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
+ } else {
+ ev.loglevel[0] = '\0';
+ }
} else {
ERR("Please specify a tracer (-k/--kernel or -u/--userspace)");
goto error;
}
ret = lttng_enable_event(handle, &ev, channel_name);
- if (ret == 0) {
+ if (ret < 0) {
+ ERR("Event %s: %s (channel %s, session %s)", event_name,
+ lttng_strerror(ret), channel_name, session_name);
+ warn = 1;
+ } else {
MSG("%s event %s created in channel %s",
opt_kernel ? "kernel": "UST", event_name, channel_name);
}
end:
error:
+ if (warn) {
+ ret = CMD_WARNING;
+ }
if (opt_channel_name == NULL) {
free(channel_name);
}
*/
int cmd_enable_events(int argc, const char **argv)
{
- int opt, ret;
+ int opt, ret = CMD_SUCCESS;
static poptContext pc;
char *session_name = NULL;
while ((opt = poptGetNextOpt(pc)) != -1) {
switch (opt) {
case OPT_HELP:
- usage(stderr);
- ret = CMD_SUCCESS;
+ usage(stdout);
goto end;
case OPT_TRACEPOINT:
opt_event_type = LTTNG_EVENT_TRACEPOINT;
break;
case OPT_LIST_OPTIONS:
list_cmd_options(stdout, long_options);
- ret = CMD_SUCCESS;
goto end;
default:
usage(stderr);
if (opt_event_list == NULL && opt_enable_all == 0) {
ERR("Missing event name(s).\n");
usage(stderr);
- ret = CMD_SUCCESS;
+ ret = CMD_ERROR;
goto end;
}
if (!opt_session_name) {
session_name = get_session_name();
if (session_name == NULL) {
- ret = -1;
+ ret = CMD_ERROR;
goto end;
}
} else {
free(session_name);
}
+ poptFreeContext(pc);
return ret;
}