X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Flive.c;h=19322f4a07bd718feba6d95167715da2d3612e62;hb=3fd2739803ea7273c6483060ac042942af06b1d4;hp=c312e78e976e89bb6949e0aee54cf48e2bdca99c;hpb=157df58664846e22bdeea84dfcf717cb43360b3f;p=lttng-tools.git diff --git a/src/bin/lttng-relayd/live.c b/src/bin/lttng-relayd/live.c index c312e78e9..19322f4a0 100644 --- a/src/bin/lttng-relayd/live.c +++ b/src/bin/lttng-relayd/live.c @@ -259,6 +259,8 @@ void *thread_listener(void *data) goto error_poll_add; } + lttng_relay_notify_ready(); + while (1) { health_code_update(); @@ -854,7 +856,8 @@ static int viewer_attach_session(struct relay_command *cmd, struct lttng_ht *sessions_ht) { - int ret, send_streams = 0, nb_streams = 0; + int ret, send_streams = 0; + uint32_t nb_streams = 0, nb_streams_ready = 0; struct lttng_viewer_attach_session_request request; struct lttng_viewer_attach_session_response response; struct lttng_viewer_stream send_stream; @@ -961,14 +964,16 @@ int viewer_attach_session(struct relay_command *cmd, if (stream->session != cmd->session) { continue; } + nb_streams++; /* - * Don't send streams with no ctf_trace, they are not ready to be - * read. + * Don't send streams with no ctf_trace, they are not + * ready to be read. */ - if (!stream->ctf_trace) { + if (!stream->ctf_trace || !stream->viewer_ready) { continue; } + nb_streams_ready++; vstream = live_find_viewer_stream_by_id(stream->stream_handle); if (!vstream) { @@ -977,7 +982,11 @@ int viewer_attach_session(struct relay_command *cmd, goto end_unlock; } } - nb_streams++; + } + + /* We must have the same amount of existing stream and ready stream. */ + if (nb_streams != nb_streams_ready) { + nb_streams = 0; } response.streams_count = htobe32(nb_streams); } @@ -1113,7 +1122,8 @@ void destroy_viewer_stream(struct relay_viewer_stream *vstream) * we need to remove it because we won't detect a EOF for this * stream. */ - if (ret_ref == 1 && vstream->ctf_trace->metadata_stream) { + if (ret_ref == 1 && vstream->ctf_trace->viewer_metadata_stream) { + delete_viewer_stream(vstream->ctf_trace->viewer_metadata_stream); destroy_viewer_stream(vstream->ctf_trace->viewer_metadata_stream); vstream->ctf_trace->metadata_stream = NULL; DBG("Freeing ctf_trace %" PRIu64, vstream->ctf_trace->id);