Merged in master, stable-2.10, stable-2.9, and stable-2.8 with a leak fix, read on.
Thanks! Jérémie On 26 May 2017 at 12:14, Mathieu Desnoyers <mathieu.desnoy...@efficios.com> wrote: > Signed-off-by: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > --- > src/bin/lttng-sessiond/cmd.c | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-) > > diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c > index c4e4ccf..dea5ab2 100644 > --- a/src/bin/lttng-sessiond/cmd.c > +++ b/src/bin/lttng-sessiond/cmd.c > @@ -243,11 +243,11 @@ end: > /* > * Fill lttng_channel array of all channels. > */ > -static void list_lttng_channels(enum lttng_domain_type domain, > +static ssize_t list_lttng_channels(enum lttng_domain_type domain, > struct ltt_session *session, struct lttng_channel *channels, > struct lttng_channel_extended *chan_exts) > { > - int i = 0, ret; > + int i = 0, ret = 0; > struct ltt_kernel_channel *kchan; > > DBG("Listing channels for session %s", session->name); > @@ -322,6 +322,9 @@ static void list_lttng_channels(enum lttng_domain_type > domain, > break; > } > > + chan_exts[i].monitor_timer_interval = > + uchan->monitor_timer_interval; > + > ret = get_ust_runtime_stats(session, uchan, > &discarded_events, &lost_packets); > if (ret < 0) { > @@ -329,8 +332,6 @@ static void list_lttng_channels(enum lttng_domain_type > domain, > } > chan_exts[i].discarded_events = discarded_events; > chan_exts[i].lost_packets = lost_packets; > - chan_exts[i].monitor_timer_interval = > - uchan->monitor_timer_interval; > i++; > } > rcu_read_unlock(); > @@ -341,7 +342,11 @@ static void list_lttng_channels(enum lttng_domain_type > domain, > } > > end: > - return; > + if (ret < 0) { > + return -LTTNG_ERR_FATAL; > + } else { > + return LTTNG_OK; > + } > } > > static void increment_extended_len(const char *filter_expression, > @@ -2936,7 +2941,10 @@ ssize_t cmd_list_channels(enum lttng_domain_type > domain, > > channel_exts = ((void *) *channels) + > (nb_chan * sizeof(struct lttng_channel)); > - list_lttng_channels(domain, session, *channels, channel_exts); > + ret = list_lttng_channels(domain, session, *channels, > channel_exts); > + if (ret != LTTNG_OK) { The caller of cmd_list_channels(), process_client_msg(), does not expect *channels to have been modified on error. Therefore, it is not free'd in the error path. I modified the patch so that the "channels" output parameter of cmd_list_channels() is only affected on success. The function thus handles the clean-up itself in case of failure. > + goto end; > + } > } else { > *channels = NULL; > } > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list lttng-dev@lists.lttng.org https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev