[lttng-dev] [PATCH] disable_channels.c improvements and fixes
Thibault, Daniel
Daniel.Thibault at drdc-rddc.gc.ca
Tue Jan 31 15:15:44 EST 2012
>From 21f0eb1a7db1704645554d2f273bf80235be8240 Tue, 31 Jan 2012 15:13:29 -0500
From: Daniel U. Thibault <daniel.thibault at drdc-rddc.gc.ca>
Date: Tue, 31 Jan 2012 15:13:19 -0500
Subject: [PATCH] disable_channels.c improvements and fixes * Improve usage() printout * Document and enforce return values * Send --help to stdout * Issue CMD_WARNING for bad channel name(s) or an empty list of channel names * Fix a memory leak
Signed-off-by: Daniel U. Thibault <daniel.thibault at drdc-rddc.gc.ca>
diff --git a/src/bin/lttng/commands/disable_channels.c b/src/bin/lttng/commands/disable_channels.c
index bdbb657..4202963 100644
--- a/src/bin/lttng/commands/disable_channels.c
+++ b/src/bin/lttng/commands/disable_channels.c
@@ -70,25 +70,29 @@
fprintf(ofp, "\n");
fprintf(ofp, " -h, --help Show this help\n");
fprintf(ofp, " --list-options Simple listing of options\n");
- fprintf(ofp, " -s, --session Apply on session name\n");
- fprintf(ofp, " -k, --kernel Apply for the kernel tracer\n");
+ fprintf(ofp, " -s, --session Apply to session name\n");
+ fprintf(ofp, " -k, --kernel Apply to the kernel tracer\n");
#if 0
- fprintf(ofp, " -u, --userspace [CMD] Apply for the user-space tracer\n");
+ fprintf(ofp, " -u, --userspace [CMD] Apply to the user-space tracer\n");
fprintf(ofp, " If no CMD, the domain used is UST global\n");
- fprintf(ofp, " or else the domain is UST EXEC_NAME\n");
+ fprintf(ofp, " otherwise the domain is UST EXEC_NAME\n");
+ fprintf(ofp, " (--kernel preempts --userspace)\n");
fprintf(ofp, " -p, --pid PID If -u, apply to specific PID (domain: UST PID)\n");
#else
- fprintf(ofp, " -u, --userspace Apply for the user-space tracer\n");
+ fprintf(ofp, " -u, --userspace Apply to the user-space tracer\n");
+ fprintf(ofp, " (--kernel preempts --userspace)\n");
#endif
fprintf(ofp, "\n");
}
/*
- * Disabling channel using the lttng API.
+ * Disabling channel(s) using the lttng API.
+ * session_name must not be NULL.
+ * Returns one of the CMD_* result values.
*/
static int disable_channels(char *session_name)
{
- int ret = CMD_SUCCESS;
+ int warn = 0, ret;
char *channel_name;
struct lttng_domain dom;
@@ -105,19 +109,25 @@
handle = lttng_create_handle(session_name, &dom);
if (handle == NULL) {
- ret = -1;
+ ret = CMD_ERROR;
goto error;
}
/* Strip channel list */
channel_name = strtok(opt_channels, ",");
+ /* Default to a warning in case opt_channels is empty */
+ ret = CMD_WARNING;
while (channel_name != NULL) {
DBG("Disabling channel %s", channel_name);
ret = lttng_disable_channel(handle, channel_name);
if (ret < 0) {
- goto error;
+ warn = 1;
+ ERR("%s channel %s unrecognised for session %s",
+ opt_kernel ? "Kernel" : "UST", channel_name,
+ session_name);
} else {
+ ret = CMD_SUCCESS;
MSG("%s channel %s disabled for session %s",
opt_kernel ? "Kernel" : "UST", channel_name,
session_name);
@@ -125,6 +135,13 @@
/* Next channel */
channel_name = strtok(NULL, ",");
+ }
+ if (ret == CMD_WARNING) {
+ ERR("No %s channel specified for session %s",
+ opt_kernel ? "kernel" : "UST", session_name);
+ }
+ if (warn) {
+ ret = CMD_WARNING;
}
error:
@@ -134,13 +151,13 @@
}
/*
- * cmd_disable_channels
- *
- * Disable channel to trace session
+ * Disable channel(s) of a trace session.
+ * Bad channel names or an empty list of channels will yield a warning.
+ * Returns a CMD_* result value.
*/
int cmd_disable_channels(int argc, const char **argv)
{
- int opt, ret;
+ int opt, ret = CMD_SUCCESS;
static poptContext pc;
char *session_name = NULL;
@@ -150,15 +167,13 @@
while ((opt = poptGetNextOpt(pc)) != -1) {
switch (opt) {
case OPT_HELP:
- usage(stderr);
- ret = CMD_SUCCESS;
+ usage(stdout);
goto end;
case OPT_USERSPACE:
opt_userspace = 1;
break;
case OPT_LIST_OPTIONS:
list_cmd_options(stdout, long_options);
- ret = CMD_SUCCESS;
goto end;
default:
usage(stderr);
@@ -171,22 +186,23 @@
if (opt_channels == NULL) {
ERR("Missing channel 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;
- goto end;
- }
- } else {
- session_name = opt_session_name;
+ session_name = (opt_session_name ? opt_session_name : get_session_name() );
+ if (session_name == NULL) {
+ ret = CMD_ERROR;
+ goto cleanup;
}
ret = disable_channels(session_name);
+cleanup:
+ if (opt_session_name == NULL) {
+ free(session_name);
+ }
+
end:
return ret;
}
------------------------------
Daniel U. Thibault
R & D pour la défense Canada - Valcartier (RDDC Valcartier) / Defence R&D Canada - Valcartier (DRDC Valcartier)
Système de systèmes (SdS) / System of Systems (SoS)
Solutions informatiques et expérimentations (SIE) / Computing Solutions and Experimentations (CSE)
2459 Boul. Pie XI Nord
Québec, QC G3J 1X5
CANADA
Vox : (418) 844-4000 x4245
Fax : (418) 844-4538
NAC: 918V QSDJ
Gouvernement du Canada / Government of Canada
<http://www.valcartier.drdc-rddc.gc.ca/>
More information about the lttng-dev
mailing list