From 5edd7e09e892604b00ca937c0f1bc887bb5a842c Mon Sep 17 00:00:00 2001 From: David Goulet Date: Wed, 23 Nov 2011 17:25:01 -0500 Subject: [PATCH] Add new API call lttng_channel_set_default_attr This call takes a lttng domain and an allocated channel attributes pointer and set the default attributes of the channel according to the domain type. This commit also fix a listing problem where the wrong output type of the channel was returned for UST. The enable-channel command is also changed to used that new API call. Signed-off-by: David Goulet --- include/lttng/lttng.h | 7 ++++ liblttngctl/lttngctl.c | 46 ++++++++++++++++++++++--- lttng-sessiond/main.c | 7 +++- lttng/commands/enable_channels.c | 59 +++++++++++++++++++++----------- lttng/commands/list.c | 2 +- 5 files changed, 95 insertions(+), 26 deletions(-) diff --git a/include/lttng/lttng.h b/include/lttng/lttng.h index 280075037..9ed3f5f94 100644 --- a/include/lttng/lttng.h +++ b/include/lttng/lttng.h @@ -370,4 +370,11 @@ extern int lttng_disable_channel(struct lttng_handle *handle, extern int lttng_calibrate(struct lttng_handle *handle, struct lttng_calibrate *calibrate); +/* + * Set the default channel attributes for a specific domain and an allocated + * lttng_channel_attr pointer. + */ +extern void lttng_channel_set_default_attr(struct lttng_domain *domain, + struct lttng_channel_attr *attr); + #endif /* _LTTNG_H */ diff --git a/liblttngctl/lttngctl.c b/liblttngctl/lttngctl.c index d0ba52bbf..fc6ff3cc1 100644 --- a/liblttngctl/lttngctl.c +++ b/liblttngctl/lttngctl.c @@ -784,10 +784,8 @@ int lttng_list_events(struct lttng_handle *handle, } /* - * lttng_set_tracing_group - * - * Set tracing group variable with name. This function - * allocate memory pointed by tracing_group. + * Set tracing group variable with name. This function allocate memory pointed + * by tracing_group. */ int lttng_set_tracing_group(const char *name) { @@ -818,6 +816,46 @@ int lttng_calibrate(struct lttng_handle *handle, return ask_sessiond(&lsm, NULL); } +/* + * Set default channel attributes. + */ +void lttng_channel_set_default_attr(struct lttng_domain *domain, + struct lttng_channel_attr *attr) +{ + /* Safety check */ + if (attr == NULL || domain == NULL) { + return; + } + + switch (domain->type) { + case LTTNG_DOMAIN_KERNEL: + attr->overwrite = DEFAULT_CHANNEL_OVERWRITE; + attr->switch_timer_interval = DEFAULT_CHANNEL_SWITCH_TIMER; + attr->read_timer_interval = DEFAULT_CHANNEL_READ_TIMER; + + attr->subbuf_size = DEFAULT_KERNEL_CHANNEL_SUBBUF_SIZE; + attr->num_subbuf = DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM; + attr->output = DEFAULT_KERNEL_CHANNEL_OUTPUT; + break; + case LTTNG_DOMAIN_UST: + case LTTNG_DOMAIN_UST_EXEC_NAME: + case LTTNG_DOMAIN_UST_PID: + case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN: + attr->overwrite = DEFAULT_CHANNEL_OVERWRITE; + attr->switch_timer_interval = DEFAULT_CHANNEL_SWITCH_TIMER; + attr->read_timer_interval = DEFAULT_CHANNEL_READ_TIMER; + + attr->subbuf_size = DEFAULT_UST_CHANNEL_SUBBUF_SIZE; + attr->num_subbuf = DEFAULT_UST_CHANNEL_SUBBUF_NUM; + attr->output = DEFAULT_UST_CHANNEL_OUTPUT; + break; + default: + /* Default behavior */ + memset(attr, 0, sizeof(struct lttng_channel_attr)); + break; + } +} + /* * Check if session daemon is alive. * diff --git a/lttng-sessiond/main.c b/lttng-sessiond/main.c index 988cb57c3..8850fc0f9 100644 --- a/lttng-sessiond/main.c +++ b/lttng-sessiond/main.c @@ -1921,8 +1921,13 @@ static void list_lttng_channels(int domain, struct ltt_session *session, uchan->attr.switch_timer_interval; channels[i].attr.read_timer_interval = uchan->attr.read_timer_interval; - channels[i].attr.output = uchan->attr.output; channels[i].enabled = uchan->enabled; + switch (uchan->attr.output) { + case LTTNG_UST_MMAP: + default: + channels[i].attr.output = LTTNG_EVENT_MMAP; + break; + } i++; } break; diff --git a/lttng/commands/enable_channels.c b/lttng/commands/enable_channels.c index 48e83df28..5c9af1d9c 100644 --- a/lttng/commands/enable_channels.c +++ b/lttng/commands/enable_channels.c @@ -31,7 +31,7 @@ #include "../utils.h" static char *opt_channels; -static char *opt_kernel; +static int opt_kernel; static char *opt_cmd_name; static char *opt_session_name; static int opt_pid_all; @@ -104,6 +104,37 @@ static void usage(FILE *ofp) fprintf(ofp, "\n"); } +/* + * Set default attributes depending on those already defined from the command + * line. + */ +static void set_default_attr(struct lttng_domain *dom) +{ + struct lttng_channel_attr default_attr; + + /* Set attributes */ + lttng_channel_set_default_attr(dom, &default_attr); + + if (chan.attr.overwrite == -1) { + chan.attr.overwrite = default_attr.overwrite; + } + if (chan.attr.subbuf_size == -1) { + chan.attr.subbuf_size = default_attr.subbuf_size; + } + if (chan.attr.num_subbuf == -1) { + chan.attr.num_subbuf = default_attr.num_subbuf; + } + if (chan.attr.switch_timer_interval == -1) { + chan.attr.switch_timer_interval = default_attr.switch_timer_interval; + } + if (chan.attr.read_timer_interval == -1) { + chan.attr.read_timer_interval = default_attr.read_timer_interval; + } + if (chan.attr.output == -1) { + chan.attr.output = default_attr.output; + } +} + /* * Adding channel using the lttng API. */ @@ -130,6 +161,8 @@ static int enable_channel(char *session_name) goto error; } + set_default_attr(&dom); + handle = lttng_create_handle(session_name, &dom); if (handle == NULL) { ret = -1; @@ -168,25 +201,11 @@ error: */ static void init_channel_config(void) { - if (opt_kernel) { - /* kernel default */ - chan.attr.overwrite = DEFAULT_CHANNEL_OVERWRITE; - chan.attr.switch_timer_interval = DEFAULT_CHANNEL_SWITCH_TIMER; - chan.attr.read_timer_interval = DEFAULT_CHANNEL_READ_TIMER; - - chan.attr.subbuf_size = DEFAULT_KERNEL_CHANNEL_SUBBUF_SIZE; - chan.attr.num_subbuf = DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM; - chan.attr.output = DEFAULT_KERNEL_CHANNEL_OUTPUT; - } else { - /* default behavior, used by UST. */ - chan.attr.overwrite = DEFAULT_CHANNEL_OVERWRITE; - chan.attr.switch_timer_interval = DEFAULT_CHANNEL_SWITCH_TIMER; - chan.attr.read_timer_interval = DEFAULT_CHANNEL_READ_TIMER; - - chan.attr.subbuf_size = DEFAULT_UST_CHANNEL_SUBBUF_SIZE; - chan.attr.num_subbuf = DEFAULT_UST_CHANNEL_SUBBUF_NUM; - chan.attr.output = DEFAULT_CHANNEL_OUTPUT; - } + /* + * Put -1 everywhere so we can identify those set by the command line and + * those needed to be set by the default values. + */ + memset(&chan.attr, -1, sizeof(chan.attr)); } /* diff --git a/lttng/commands/list.c b/lttng/commands/list.c index 66f365e01..abbdea1ba 100644 --- a/lttng/commands/list.c +++ b/lttng/commands/list.c @@ -279,7 +279,7 @@ static int list_events(const char *channel_name) MSG("\n%sEvents:", indent4); if (count == 0) { - MSG("%sNone", indent6); + MSG("%sNone\n", indent6); goto end; } -- 2.34.1