source.ctf.lttng-live: clean-up: don't restart session iteration
[babeltrace.git] / src / plugins / ctf / lttng-live / lttng-live.c
index e9007acbec497afd5692e8b0c5cec4b5662cf0c3..1ea6073375b15da49b841ab4458fd8375c846518 100644 (file)
@@ -955,16 +955,6 @@ enum lttng_live_iterator_status next_stream_iterator_for_trace(
                        g_ptr_array_index(live_trace->stream_iterators,
                                stream_iter_idx);
 
-               /*
-                * Since we may remove elements from the GPtrArray as we
-                * iterate over it, it's possible to see the same element more
-                * than once.
-                */
-               if (stream_iter == youngest_candidate_stream_iter) {
-                       stream_iter_idx++;
-                       continue;
-               }
-
                /*
                 * Find if there is are now current message for this stream
                 * iterator get it.
@@ -1067,14 +1057,17 @@ enum lttng_live_iterator_status next_stream_iterator_for_trace(
                        stream_iter_idx++;
                } else {
                        /*
-                        * The live stream iterator is ENDed. We remove that
-                        * iterator from the list and we restart the iteration
-                        * at the beginning of the live stream iterator array
-                        * to because the removal will shuffle the array.
+                        * The live stream iterator has ended. That
+                        * iterator is removed from the array, but
+                        * there is no need to increment
+                        * stream_iter_idx as
+                        * g_ptr_array_remove_index_fast replaces the
+                        * removed element with the array's last
+                        * element.
                         */
-                       g_ptr_array_remove_index_fast(live_trace->stream_iterators,
+                       g_ptr_array_remove_index_fast(
+                               live_trace->stream_iterators,
                                stream_iter_idx);
-                       stream_iter_idx = 0;
                }
        }
 
@@ -1288,16 +1281,6 @@ bt_component_class_message_iterator_next_method_status lttng_live_msg_iter_next(
 
                BT_ASSERT_DBG(lttng_live_msg_iter->sessions);
                session_idx = 0;
-               /*
-                * Use a while loop instead of a for loop so we can restart the
-                * iteration if we remove an element. We can safely call
-                * next_stream_iterator_for_session() multiple times on the
-                * same session as we only fetch a new message if there is no
-                * current next message for each live stream iterator.
-                * If all live stream iterator of that session already have a
-                * current next message, the function will simply exit return
-                * the same candidate live stream iterator every time.
-                */
                while (session_idx < lttng_live_msg_iter->sessions->len) {
                        struct lttng_live_session *session =
                                g_ptr_array_index(lttng_live_msg_iter->sessions,
@@ -1315,14 +1298,15 @@ bt_component_class_message_iterator_next_method_status lttng_live_msg_iter_next(
                        if (stream_iter_status == LTTNG_LIVE_ITERATOR_STATUS_END) {
                                if (session->closed && session->traces->len == 0) {
                                        /*
-                                        * Remove the session from the list and restart the
-                                        * iteration at the beginning of the array since the
-                                        * removal shuffle the elements of the array.
+                                        * Remove the session from the list.
+                                        * session_idx is not modified since
+                                        * g_ptr_array_remove_index_fast
+                                        * replaces the the removed element with
+                                        * the array's last element.
                                         */
                                        g_ptr_array_remove_index_fast(
                                                lttng_live_msg_iter->sessions,
                                                session_idx);
-                                       session_idx = 0;
                                } else {
                                        session_idx++;
                                }
This page took 0.023805 seconds and 4 git commands to generate.