src.ctf.lttng-live: make `lttng_live_attach_session()` return status
[babeltrace.git] / src / plugins / ctf / lttng-live / lttng-live.c
index af7237bdc2ed721c5d7d3f10e34678384ac735d8..fa493cbb3853fc7960764ecaf34ee00f1b33a9ee 100644 (file)
@@ -35,6 +35,7 @@
 
 #include <glib.h>
 #include <inttypes.h>
+#include <stdbool.h>
 #include <unistd.h>
 
 #include "common/assert.h"
@@ -436,11 +437,11 @@ enum lttng_live_iterator_status lttng_live_get_session(
 {
        enum lttng_live_iterator_status status;
        uint64_t trace_idx;
-       int ret = 0;
 
        if (!session->attached) {
-               ret = lttng_live_attach_session(session);
-               if (ret) {
+               enum lttng_live_attach_session_status attach_status =
+                       lttng_live_attach_session(session);
+               if (attach_status != LTTNG_LIVE_ATTACH_SESSION_STATUS_OK) {
                        if (lttng_live_graph_is_canceled(lttng_live_msg_iter)) {
                                status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
                        } else {
@@ -455,13 +456,30 @@ enum lttng_live_iterator_status lttng_live_get_session(
                        status != LTTNG_LIVE_ITERATOR_STATUS_END) {
                goto end;
        }
-       for (trace_idx = 0; trace_idx < session->traces->len; trace_idx++) {
+       trace_idx = 0;
+       while (trace_idx < session->traces->len) {
                struct lttng_live_trace *trace =
                        g_ptr_array_index(session->traces, trace_idx);
 
                status = lttng_live_metadata_update(trace);
-               if (status != LTTNG_LIVE_ITERATOR_STATUS_OK &&
-                               status != LTTNG_LIVE_ITERATOR_STATUS_END) {
+               switch (status) {
+               case LTTNG_LIVE_ITERATOR_STATUS_OK:
+                       trace_idx++;
+                       break;
+               case LTTNG_LIVE_ITERATOR_STATUS_END:
+                       /*
+                        * The trace has ended. Remove it of the array an
+                        * continue the iteration.
+                        * We can remove the trace safely when using the
+                        * g_ptr_array_remove_index_fast because it replaces
+                        * the element at trace_idx with the array's last
+                        * element. trace_idx is not incremented because of
+                        * that.
+                        */
+                       (void) g_ptr_array_remove_index_fast(session->traces,
+                               trace_idx);
+                       break;
+               default:
                        goto end;
                }
        }
This page took 0.02345 seconds and 4 git commands to generate.