#include <errno.h>
#include <inttypes.h>
#include <fcntl.h>
-#include <sys/mman.h>
#include <poll.h>
#include <babeltrace/ctf/ctf-index.h>
#include <babeltrace/compat/memstream.h>
#include <babeltrace/compat/send.h>
#include <babeltrace/compat/string.h>
+#include <babeltrace/compat/mman.h>
+#include <babeltrace/babeltrace-internal.h>
#include "lttng-live.h"
#include "lttng-viewer-abi.h"
#define ACTIVE_POLL_DELAY 100 /* ms */
-/*
- * Memory allocation zeroed
- */
-#define zmalloc(x) calloc(1, x)
-
-#ifndef max_t
-#define max_t(type, a, b) \
- ((type) (a) > (type) (b) ? (type) (a) : (type) (b))
-#endif
-
static void ctf_live_packet_seek(struct bt_stream_pos *stream_pos,
size_t index, int whence);
static int add_traces(struct lttng_live_ctx *ctx);
}
cmd.cmd = htobe32(LTTNG_VIEWER_CONNECT);
- cmd.data_size = sizeof(connect);
- cmd.cmd_version = 0;
+ cmd.data_size = htobe64((uint64_t) sizeof(connect));
+ cmd.cmd_version = htobe32(0);
connect.viewer_session_id = -1ULL; /* will be set on recv */
connect.major = htobe32(LTTNG_LIVE_MAJOR);
for (i = 0; i < session_list->len; i++) {
relay_session = g_ptr_array_index(session_list, i);
- fprintf(stdout, "%s/host/%s/%s (timer = %u, "
+ fprintf(LTTNG_LIVE_OUTPUT_FP, "%s/host/%s/%s (timer = %u, "
"%u stream(s), %u client(s) connected)\n",
path, relay_session->hostname,
relay_session->name, relay_session->timer,
}
cmd.cmd = htobe32(LTTNG_VIEWER_LIST_SESSIONS);
- cmd.data_size = 0;
- cmd.cmd_version = 0;
+ cmd.data_size = htobe64((uint64_t) 0);
+ cmd.cmd_version = htobe32(0);
ret_len = lttng_live_send(ctx->control_sock, &cmd, sizeof(cmd));
if (ret_len < 0) {
int ret = 0;
stream->metadata_fp_write =
- babeltrace_open_memstream(metadata_buf, size);
+ bt_open_memstream(metadata_buf, size);
if (!stream->metadata_fp_write) {
perror("Metadata open_memstream");
ret = -1;
}
cmd.cmd = htobe32(LTTNG_VIEWER_ATTACH_SESSION);
- cmd.data_size = sizeof(rq);
- cmd.cmd_version = 0;
+ cmd.data_size = htobe64((uint64_t) sizeof(rq));
+ cmd.cmd_version = htobe32(0);
memset(&rq, 0, sizeof(rq));
rq.session_id = htobe64(id);
metadata = viewer_stream->ctf_trace->metadata_stream;
metadata->ctf_trace->metadata_fp =
- babeltrace_fmemopen(metadata_buf,
+ bt_fmemopen(metadata_buf,
metadata->metadata_len, "rb");
if (!metadata->ctf_trace->metadata_fp) {
perror("Metadata fmemopen");
ret = -1;
goto end;
}
+
cmd.cmd = htobe32(LTTNG_VIEWER_GET_PACKET);
- cmd.data_size = sizeof(rq);
- cmd.cmd_version = 0;
+ cmd.data_size = htobe64((uint64_t) sizeof(rq));
+ cmd.cmd_version = htobe32(0);
memset(&rq, 0, sizeof(rq));
rq.stream_id = htobe64(stream->id);
rq.stream_id = htobe64(metadata_stream->id);
cmd.cmd = htobe32(LTTNG_VIEWER_GET_METADATA);
- cmd.data_size = sizeof(rq);
- cmd.cmd_version = 0;
+ cmd.data_size = htobe64((uint64_t) sizeof(rq));
+ cmd.cmd_version = htobe32(0);
ret_len = lttng_live_send(ctx->control_sock, &cmd, sizeof(cmd));
if (ret_len < 0) {
}
} while (ret > 0 || !len_read);
- if (fclose(metadata_stream->metadata_fp_write))
- perror("fclose");
+ if (bt_close_memstream(metadata_buf, &size,
+ metadata_stream->metadata_fp_write)) {
+ perror("bt_close_memstream");
+ }
metadata_stream->metadata_fp_write = NULL;
error:
struct lttng_viewer_index *rp = &viewer_stream->current_index;
cmd.cmd = htobe32(LTTNG_VIEWER_GET_NEXT_INDEX);
- cmd.data_size = sizeof(rq);
- cmd.cmd_version = 0;
+ cmd.data_size = htobe64((uint64_t) sizeof(rq));
+ cmd.cmd_version = htobe32(0);
memset(&rq, 0, sizeof(rq));
rq.stream_id = htobe64(viewer_stream->id);
cur_index->ts_real.timestamp_begin;
}
+ /*
+ * Flush the output between attempts to grab a packet, thus
+ * ensuring we flush at least at the periodical timer period.
+ * This ensures the output remains reactive for interactive users and
+ * that the output is flushed when redirected to a file by the shell.
+ */
+ if (fflush(LTTNG_LIVE_OUTPUT_FP) < 0) {
+ perror("fflush");
+ goto end;
+ }
+
if (pos->packet_size == 0 || pos->offset == EOF) {
goto end;
}
}
cmd.cmd = htobe32(LTTNG_VIEWER_CREATE_SESSION);
- cmd.data_size = 0;
- cmd.cmd_version = 0;
+ cmd.data_size = htobe64((uint64_t) 0);
+ cmd.cmd_version = htobe32(0);
ret_len = lttng_live_send(ctx->control_sock, &cmd, sizeof(cmd));
if (ret_len < 0) {
goto end_free;
}
- trace->metadata_fp = babeltrace_fmemopen(metadata_buf,
+ trace->metadata_fp = bt_fmemopen(metadata_buf,
stream->metadata_len, "rb");
if (!trace->metadata_fp) {
perror("Metadata fmemopen");
}
cmd.cmd = htobe32(LTTNG_VIEWER_GET_NEW_STREAMS);
- cmd.data_size = sizeof(rq);
- cmd.cmd_version = 0;
+ cmd.data_size = htobe64((uint64_t) sizeof(rq));
+ cmd.cmd_version = htobe32(0);
memset(&rq, 0, sizeof(rq));
rq.session_id = htobe64(id);
goto end;
}
- fmt_write = bt_lookup_format(g_quark_from_static_string("text"));
+ fmt_write = bt_lookup_format(g_quark_from_string("text"));
if (!fmt_write) {
fprintf(stderr, "[error] ctf-text error\n");
goto end;