X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Flive.c;h=bafdf35ce90034a90e8ee0e9eaa1a8996103de9e;hb=9237e6a108fdba7acc014f739d0569565552bdec;hp=57ff9197ac71a106e90e1500affd24612f6e8b0e;hpb=48e6cb13aaf1dc3875ac7ba9543649ea301ef20a;p=lttng-tools.git diff --git a/src/bin/lttng-relayd/live.c b/src/bin/lttng-relayd/live.c index 57ff9197a..bafdf35ce 100644 --- a/src/bin/lttng-relayd/live.c +++ b/src/bin/lttng-relayd/live.c @@ -313,6 +313,18 @@ int make_viewer_streams(struct relay_session *session, if (!stream->published) { goto next; } + /* + * Stream has no data, don't consider it yet. + */ + if (stream->is_metadata) { + if (!stream->metadata_received) { + goto next; + } + } else { + if (stream->prev_seq == -1ULL) { + goto next; + } + } vstream = viewer_stream_get_by_id(stream->stream_handle); if (!vstream) { vstream = viewer_stream_create(stream, seek_t); @@ -1442,9 +1454,11 @@ send_reply: } health_code_update(); - DBG("Index %" PRIu64 " for stream %" PRIu64 " sent", - vstream->last_sent_index, - vstream->stream->stream_handle); + if (vstream) { + DBG("Index %" PRIu64 " for stream %" PRIu64 " sent", + vstream->last_sent_index, + vstream->stream->stream_handle); + } end: if (metadata_viewer_stream) { viewer_stream_put(metadata_viewer_stream); @@ -1478,8 +1492,6 @@ int viewer_get_packet(struct relay_connection *conn) struct lttng_viewer_get_packet get_packet_info; struct lttng_viewer_trace_packet reply; struct relay_viewer_stream *vstream = NULL; - struct ctf_trace *ctf_trace; - struct relay_viewer_stream *metadata_viewer_stream = NULL; DBG2("Relay get data packet"); @@ -1501,39 +1513,6 @@ int viewer_get_packet(struct relay_connection *conn) goto send_reply_nolock; } - ctf_trace = vstream->stream->trace; - - /* metadata_viewer_stream may be NULL. */ - metadata_viewer_stream = - ctf_trace_get_viewer_metadata_stream(ctf_trace); - - if (metadata_viewer_stream) { - bool get_packet_err = false; - - pthread_mutex_lock(&metadata_viewer_stream->stream->lock); - DBG("get packet metadata check: recv %" PRIu64 " sent %" PRIu64, - metadata_viewer_stream->stream->metadata_received, - metadata_viewer_stream->metadata_sent); - if (!metadata_viewer_stream->stream->metadata_received || - metadata_viewer_stream->stream->metadata_received > - metadata_viewer_stream->metadata_sent) { - /* - * We prevent the client from reading a data stream as - * long as there is metadata left to consume. This - * ensures that the client won't receive data of which - * it can't make sense. - */ - get_packet_err = true; - } - pthread_mutex_unlock(&metadata_viewer_stream->stream->lock); - viewer_stream_put(metadata_viewer_stream); - if (get_packet_err) { - reply.status = htobe32(LTTNG_VIEWER_GET_PACKET_ERR); - reply.flags |= LTTNG_VIEWER_FLAG_NEW_METADATA; - goto send_reply_nolock; - } - } - pthread_mutex_lock(&vstream->stream->lock); len = be32toh(get_packet_info.len);