Fix: handle new streams in get_data_packet()
[babeltrace.git] / formats / lttng-live / lttng-live-comm.c
index 568a4a1e806d64db8ad6191d4f0fcce25670ea21..945df4317bdec9d0ca1aa324405f110d229d8143 100644 (file)
@@ -589,10 +589,12 @@ int append_metadata(struct lttng_live_ctx *ctx,
        ret = ctf_append_trace_metadata(
                        viewer_stream->ctf_trace->handle->td,
                        metadata->ctf_trace->metadata_fp);
-       if (ret != 0) {
+       /* We accept empty metadata packets */
+       if (ret != 0 && ret != -ENOENT) {
                fprintf(stderr, "[error] Appending metadata\n");
                goto error;
        }
+       ret = 0;
 
 error:
        return ret;
@@ -674,15 +676,19 @@ retry:
                        ret = append_metadata(ctx, stream);
                        if (ret)
                                goto error;
-                       goto retry;
                }
                if (rp.flags & LTTNG_VIEWER_FLAG_NEW_STREAM) {
+                       printf_verbose("get_data_packet: new streams needed\n");
                        ret = ask_new_streams(ctx);
                        if (ret < 0)
                                goto error;
                        g_hash_table_foreach(ctx->session->ctf_traces, add_traces,
                                        ctx->bt_ctx);
                }
+               if (rp.flags & (LTTNG_VIEWER_FLAG_NEW_METADATA
+                               | LTTNG_VIEWER_FLAG_NEW_STREAM)) {
+                       goto retry;
+               }
                fprintf(stderr, "[error] get_data_packet: error\n");
                ret = -1;
                goto end;
@@ -743,7 +749,7 @@ retry:
                goto error;
        }
        assert(ret_len == len);
-
+       ret = 0;
 end:
 error:
        return ret;
This page took 0.023105 seconds and 4 git commands to generate.