With the feature of not sending the trace file padding over the network
for streaming, the return value of mmap or splice failed to match the
passed value when the trace is written on disk since we ignore the
padding for that case.
However, this was simply to print an error message so no behavior is
changed with this patch.
Detail comments were added to explain this "complex" return value check.
Signed-off-by: David Goulet <dgoulet@efficios.com>
padding = 0;
/* splice the subbuffer to the tracefile */
padding = 0;
/* splice the subbuffer to the tracefile */
- ret = lttng_consumer_on_read_subbuffer_splice(ctx, stream,
- subbuf_size, padding);
+ ret = lttng_consumer_on_read_subbuffer_splice(ctx, stream, subbuf_size,
+ padding);
+ /*
+ * XXX: Splice does not support network streaming so the return value
+ * is simply checked against subbuf_size and not like the mmap() op.
+ */
if (ret != subbuf_size) {
/*
* display the error but continue processing to try
if (ret != subbuf_size) {
/*
* display the error but continue processing to try
padding = len - subbuf_size;
/* write the subbuffer to the tracefile */
padding = len - subbuf_size;
/* write the subbuffer to the tracefile */
- ret = lttng_consumer_on_read_subbuffer_mmap(ctx, stream,
- subbuf_size, padding);
- if (ret != subbuf_size) {
+ ret = lttng_consumer_on_read_subbuffer_mmap(ctx, stream, subbuf_size,
+ padding);
+ /*
+ * The mmap operation should write subbuf_size amount of data when
+ * network streaming or the full padding (len) size when we are _not_
+ * streaming.
+ */
+ if ((ret != subbuf_size && stream->net_seq_idx != -1) ||
+ (ret != len && stream->net_seq_idx == -1)) {
- * display the error but continue processing to try
- * to release the subbuffer
+ * Display the error but continue processing to try to release the
+ * subbuffer
- ERR("Error writing to tracefile (ret: %zd != len: %lu",
- ret, subbuf_size);
+ ERR("Error writing to tracefile "
+ "(ret: %zd != len: %lu != subbuf_size: %lu)",
+ ret, len, subbuf_size);
padding = len - subbuf_size;
/* write the subbuffer to the tracefile */
ret = lttng_consumer_on_read_subbuffer_mmap(ctx, stream, subbuf_size, padding);
padding = len - subbuf_size;
/* write the subbuffer to the tracefile */
ret = lttng_consumer_on_read_subbuffer_mmap(ctx, stream, subbuf_size, padding);
- if (ret != subbuf_size) {
+ /*
+ * The mmap operation should write subbuf_size amount of data when network
+ * streaming or the full padding (len) size when we are _not_ streaming.
+ */
+ if ((ret != subbuf_size && stream->net_seq_idx != -1) ||
+ (ret != len && stream->net_seq_idx == -1)) {
- * display the error but continue processing to try
- * to release the subbuffer
+ * Display the error but continue processing to try to release the
+ * subbuffer
- ERR("Error writing to tracefile (expected: %ld, got: %ld)", ret, len);
+ ERR("Error writing to tracefile "
+ "(ret: %zd != len: %lu != subbuf_size: %lu)",
+ ret, len, subbuf_size);
+
}
err = ustctl_put_next_subbuf(handle, buf);
assert(err == 0);
}
err = ustctl_put_next_subbuf(handle, buf);
assert(err == 0);