*/
pthread_mutex_lock(&stream->lock);
+ /*
+ * Assign the received relayd ID so we can use it for streaming. The streams
+ * are not visible to anyone so this is OK to change it.
+ */
stream->net_seq_idx = relayd_id;
channel->relayd_id = relayd_id;
if (relayd_id != (uint64_t) -1ULL) {
ret = kernctl_get_subbuf_size(stream->wait_fd, &len);
if (ret < 0) {
ERR("Snapshot kernctl_get_subbuf_size");
- goto end_unlock;
+ goto error_put_subbuf;
}
ret = kernctl_get_padded_subbuf_size(stream->wait_fd, &padded_len);
if (ret < 0) {
ERR("Snapshot kernctl_get_padded_subbuf_size");
- goto end_unlock;
+ goto error_put_subbuf;
}
read_len = lttng_consumer_on_read_subbuffer_mmap(ctx, stream, len,
padded_len - len);
/*
- * We write the padded len in local tracefiles but the
- * data len when using a relay.
- * Display the error but continue processing to try to
- * release the subbuffer.
+ * We write the padded len in local tracefiles but the data len
+ * when using a relay. Display the error but continue processing
+ * to try to release the subbuffer.
*/
if (relayd_id != (uint64_t) -1ULL) {
if (read_len != len) {
ret = 0;
goto end;
+error_put_subbuf:
+ ret = kernctl_put_subbuf(stream->wait_fd);
+ if (ret < 0) {
+ ERR("Snapshot kernctl_put_subbuf error path");
+ }
end_unlock:
pthread_mutex_unlock(&stream->lock);
end:
msg.u.channel.name, msg.u.channel.uid, msg.u.channel.gid,
msg.u.channel.relayd_id, msg.u.channel.output,
msg.u.channel.tracefile_size,
- msg.u.channel.tracefile_count,
+ msg.u.channel.tracefile_count, 0,
msg.u.channel.monitor);
if (new_channel == NULL) {
lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_OUTFD_ERROR);
goto end_nosignal;
}
new_channel->nb_init_stream_left = msg.u.channel.nb_init_streams;
+ switch (msg.u.channel.output) {
+ case LTTNG_EVENT_SPLICE:
+ new_channel->output = CONSUMER_CHANNEL_SPLICE;
+ break;
+ case LTTNG_EVENT_MMAP:
+ new_channel->output = CONSUMER_CHANNEL_MMAP;
+ break;
+ default:
+ ERR("Channel output unknown %d", msg.u.channel.output);
+ goto end_nosignal;
+ }
/* Translate and save channel type. */
switch (msg.u.channel.type) {
/* Do not monitor this stream. */
if (!channel->monitor) {
- DBG("Kernel consumer add stream %s in no monitor mode with"
+ DBG("Kernel consumer add stream %s in no monitor mode with "
"relayd id %" PRIu64, new_stream->name,
- new_stream->relayd_stream_id);
+ new_stream->net_seq_idx);
cds_list_add(&new_stream->no_monitor_node,
&channel->stream_no_monitor_list.head);
break;