source.ctf.lttng-live: clean-up: don't restart stream iteration
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 25 Oct 2019 21:41:50 +0000 (17:41 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 30 Oct 2019 19:14:53 +0000 (15:14 -0400)
Don't restart the iteration on a stream array when a stream has
to be removed. The contents of the array's current position are
replaced by the contents of the last position in the array. Thus,
we can continue the iteration from the current index.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ia465f2995d6ee0ad1241063bc62e92cbf40745eb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2263
CI-Build: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
src/plugins/ctf/lttng-live/lttng-live.c

index e9007acbec497afd5692e8b0c5cec4b5662cf0c3..7da40dc26c94847c32eea839af94163f4faa3ec4 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;
                }
        }
 
This page took 0.025256 seconds and 4 git commands to generate.