From 6192b9881a890a2fccc029054b312df95cbf5529 Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Wed, 5 Feb 2014 18:34:26 -0500 Subject: [PATCH] Create the live viewer session before attaching The lttng-live protocol now requires that we create a viewer session before attaching to a trace. Signed-off-by: Julien Desfossez Signed-off-by: Mathieu Desnoyers --- formats/lttng-live/lttng-live-functions.c | 47 +++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/formats/lttng-live/lttng-live-functions.c b/formats/lttng-live/lttng-live-functions.c index 8f86eeae..0974b567 100644 --- a/formats/lttng-live/lttng-live-functions.c +++ b/formats/lttng-live/lttng-live-functions.c @@ -972,6 +972,48 @@ end: return; } +int lttng_live_create_viewer_session(struct lttng_live_ctx *ctx) +{ + struct lttng_viewer_cmd cmd; + struct lttng_viewer_create_session_response resp; + int ret; + ssize_t ret_len; + + cmd.cmd = htobe32(LTTNG_VIEWER_CREATE_SESSION); + cmd.data_size = 0; + cmd.cmd_version = 0; + + do { + ret_len = send(ctx->control_sock, &cmd, sizeof(cmd), 0); + } while (ret_len < 0 && errno == EINTR); + if (ret_len < 0) { + fprintf(stderr, "[error] Error sending cmd\n"); + ret = ret_len; + goto error; + } + assert(ret_len == sizeof(cmd)); + + do { + ret_len = recv(ctx->control_sock, &resp, sizeof(resp), 0); + } while (ret_len < 0 && errno == EINTR); + if (ret_len < 0) { + fprintf(stderr, "[error] Error receiving create session reply\n"); + ret = ret_len; + goto error; + } + assert(ret_len == sizeof(resp)); + + if (be32toh(resp.status) != LTTNG_VIEWER_CREATE_SESSION_OK) { + fprintf(stderr, "[error] Error creating viewer session\n"); + ret = -1; + goto error; + } + ret = 0; + +error: + return ret; +} + void lttng_live_read(struct lttng_live_ctx *ctx, uint64_t session_id) { int ret, active_session = 0; @@ -1006,6 +1048,11 @@ void lttng_live_read(struct lttng_live_ctx *ctx, uint64_t session_id) if (!sout->parent.event_cb) goto end_free; + ret = lttng_live_create_viewer_session(ctx); + if (ret < 0) { + goto end_free; + } + /* * As long as the session is active, we try to reattach to it, * even if all the streams get closed. -- 2.34.1