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>
g_ptr_array_index(live_trace->stream_iterators,
stream_iter_idx);
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.
/*
* Find if there is are now current message for this stream
* iterator get it.
stream_iter_idx++;
} else {
/*
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,