Fix: src.ctf.lttng-live: consider empty metadata packet as retry
[babeltrace.git] / src / plugins / ctf / lttng-live / viewer-connection.c
index 0a3f5018435982d28f653959f93754ed0ff234d4..f21dc21ca8e0216dcd526d16e5b8c88c05796613 100644 (file)
@@ -1316,14 +1316,18 @@ enum lttng_live_get_one_metadata_status lttng_live_get_one_metadata_packet(
        }
 
        len = be64toh(rp.len);
-       BT_COMP_LOGD("Writing %" PRIu64" bytes to metadata", len);
-       if (len <= 0) {
-               BT_COMP_LOGE_APPEND_CAUSE(self_comp,
-                       "Erroneous response length");
-               status = LTTNG_LIVE_GET_ONE_METADATA_STATUS_ERROR;
-               goto end;
+       if (len == 0) {
+               /*
+                * We received a `LTTNG_VIEWER_METADATA_OK` with a packet
+                * length of 0. This means we must try again. This scenario
+                * arises when a clear command is performed on an lttng session.
+                */
+               BT_COMP_LOGD("Expecting a metadata packet of size 0. Retry to get a packet from the relay.");
+               goto empty_metadata_packet_retry;
        }
 
+       BT_COMP_LOGD("Writing %" PRIu64" bytes to metadata", len);
+
        data = g_new0(gchar, len);
        if (!data) {
                BT_COMP_LOGE_APPEND_CAUSE_ERRNO(self_comp,
@@ -1351,6 +1355,7 @@ enum lttng_live_get_one_metadata_status lttng_live_get_one_metadata_packet(
                goto end;
        }
 
+empty_metadata_packet_retry:
        *reply_len = len;
        status = LTTNG_LIVE_GET_ONE_METADATA_STATUS_OK;
 
This page took 0.024965 seconds and 4 git commands to generate.