X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Flive.c;h=8f73cd27c3eb908b30258ce1fe9c78b340b97e84;hb=c7759e6a503ebd197dd6a84de0eeaa52fbd0e81f;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..8f73cd27c 100644 --- a/src/bin/lttng-relayd/live.c +++ b/src/bin/lttng-relayd/live.c @@ -155,7 +155,7 @@ int create_thread_poll_set(struct lttng_poll_event *events, int size) } /* Add quit pipe */ - ret = lttng_poll_add(events, live_thread_quit_pipe[0], LPOLLIN); + ret = lttng_poll_add(events, live_thread_quit_pipe[0], LPOLLIN | LPOLLERR); if (ret < 0) { goto error; } @@ -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);