X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fclient.c;h=5e95a59f0fabf2c6874a01d276a7357945d137c2;hb=33b9609d08bf77e0afcb34d8d14b6fee44ffa0aa;hp=a36b81c18a127b536f0a11abf5d48ccc2fafe4be;hpb=f953b297c44e58bf84afbe04abd758e63149f40b;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/client.c b/src/bin/lttng-sessiond/client.c index a36b81c18..5e95a59f0 100644 --- a/src/bin/lttng-sessiond/client.c +++ b/src/bin/lttng-sessiond/client.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 David Goulet + * Copyright (C) 2011 EfficiOS Inc. * Copyright (C) 2011 Mathieu Desnoyers * Copyright (C) 2013 Jérémie Galarneau * @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "client.h" @@ -495,6 +496,7 @@ static int create_kernel_session(struct ltt_session *session) session->kernel_session->gid = session->gid; session->kernel_session->output_traces = session->output_traces; session->kernel_session->snapshot_mode = session->snapshot_mode; + session->kernel_session->is_live_session = session->live_timer != 0; return LTTNG_OK; @@ -715,6 +717,9 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int *sock, int ret = LTTNG_OK; int need_tracing_session = 1; int need_domain; + struct lttng_dynamic_buffer payload; + + lttng_dynamic_buffer_init(&payload); DBG("Processing client command %d", cmd_ctx->lsm->cmd_type); @@ -1194,12 +1199,7 @@ error_add_context: } case LTTNG_ENABLE_CHANNEL: { - cmd_ctx->lsm->u.channel.chan.attr.extended.ptr = - (struct lttng_channel_extended *) &cmd_ctx->lsm->u.channel.extended; - ret = cmd_enable_channel(cmd_ctx->session, - ALIGNED_CONST_PTR(cmd_ctx->lsm->domain), - ALIGNED_CONST_PTR(cmd_ctx->lsm->u.channel.chan), - kernel_poll_pipe[1]); + ret = cmd_enable_channel(cmd_ctx, *sock, kernel_poll_pipe[1]); break; } case LTTNG_PROCESS_ATTR_TRACKER_ADD_INCLUDE_VALUE: @@ -1705,20 +1705,20 @@ error_add_context: } case LTTNG_LIST_CHANNELS: { - ssize_t payload_size; - struct lttng_channel *channels = NULL; + uint32_t nb_channel; + enum lttng_error_code ret_code; + struct lttcomm_list_command_header cmd_header = { 0 }; - payload_size = cmd_list_channels(cmd_ctx->lsm->domain.type, - cmd_ctx->session, &channels); - if (payload_size < 0) { - /* Return value is a negative lttng_error_code. */ - ret = -payload_size; + ret_code = cmd_list_channels(cmd_ctx->lsm->domain.type, + cmd_ctx->session, &payload, &nb_channel); + if (ret_code != LTTNG_OK) { + ret = (int) ret_code; goto error; } - ret = setup_lttng_msg_no_cmd_header(cmd_ctx, channels, - payload_size); - free(channels); + cmd_header.count = nb_channel; + ret = setup_lttng_msg(cmd_ctx, payload.data, payload.size, + &cmd_header, sizeof(cmd_header)); if (ret < 0) { goto setup_error; @@ -2107,6 +2107,7 @@ setup_error: } init_setup_error: assert(!rcu_read_ongoing()); + lttng_dynamic_buffer_reset(&payload); return ret; }