From c7d620a2a00e1da14a0d06752b9055d9de6017b5 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Mon, 24 Sep 2012 16:55:08 -0400 Subject: [PATCH] Fix: Returned code when listing kernel channel The lttng_list_channels() API call now returns a LTTNG_ERR_KERN_CHAN_NOT_FOUND or LTTNG_ERR_UST_CHAN_NOT_FOUND when there is no channel enabled for the session and domain. Changes had to be made to the list command in order to correctly manage the returned code. The bug260 mentionned that the session(s) were destroyed but this could not be reproduce. However, the rest of the bug description is valid. Fixes #260 Signed-off-by: David Goulet --- src/bin/lttng-sessiond/cmd.c | 8 ++++++++ src/bin/lttng/commands/list.c | 14 ++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c index 460f1d69f..06bf0f4f3 100644 --- a/src/bin/lttng-sessiond/cmd.c +++ b/src/bin/lttng-sessiond/cmd.c @@ -1928,6 +1928,9 @@ ssize_t cmd_list_channels(int domain, struct ltt_session *session, nb_chan = session->kernel_session->channel_count; } DBG3("Number of kernel channels %zd", nb_chan); + if (nb_chan <= 0) { + ret = LTTNG_ERR_KERN_CHAN_NOT_FOUND; + } break; case LTTNG_DOMAIN_UST: if (session->ust_session != NULL) { @@ -1935,6 +1938,9 @@ ssize_t cmd_list_channels(int domain, struct ltt_session *session, session->ust_session->domain_global.channels); } DBG3("Number of UST global channels %zd", nb_chan); + if (nb_chan <= 0) { + ret = LTTNG_ERR_UST_CHAN_NOT_FOUND; + } break; default: *channels = NULL; @@ -1952,6 +1958,8 @@ ssize_t cmd_list_channels(int domain, struct ltt_session *session, list_lttng_channels(domain, session, *channels); } else { *channels = NULL; + /* Ret value was set in the domain switch case */ + goto error; } return nb_chan; diff --git a/src/bin/lttng/commands/list.c b/src/bin/lttng/commands/list.c index 696e80e7f..28e186444 100644 --- a/src/bin/lttng/commands/list.c +++ b/src/bin/lttng/commands/list.c @@ -521,11 +521,17 @@ static int list_channels(const char *channel_name) count = lttng_list_channels(handle, &channels); if (count < 0) { - ret = count; + switch (-count) { + case LTTNG_ERR_KERN_CHAN_NOT_FOUND: + ret = CMD_SUCCESS; + WARN("No kernel channel"); + break; + default: + /* We had a real error */ + ret = count; + ERR("%s", lttng_strerror(ret)); + } goto error_channels; - } else if (count == 0) { - ERR("Channel %s not found", channel_name); - goto error; } if (channel_name == NULL) { -- 2.34.1