From: Simon Marchi Date: Thu, 7 Dec 2023 05:09:24 +0000 (+0000) Subject: src.ctf.lttng-live: make lttng_live_trace::stream_iterators an std::vector X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=db00b8779b5995d9dc3f9c91638ac7c7c16da005 src.ctf.lttng-live: make lttng_live_trace::stream_iterators an std::vector Change-Id: I745900032bc5d880a305e434afaeaeaef728708d Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/8461 Reviewed-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/12377 Tested-by: jenkins --- diff --git a/src/plugins/ctf/lttng-live/data-stream.cpp b/src/plugins/ctf/lttng-live/data-stream.cpp index afbdc0dc..0c85fa99 100644 --- a/src/plugins/ctf/lttng-live/data-stream.cpp +++ b/src/plugins/ctf/lttng-live/data-stream.cpp @@ -117,7 +117,7 @@ enum lttng_live_iterator_status lttng_live_lazy_msg_init(struct lttng_live_sessi bt_self_message_iterator *self_msg_iter) { struct lttng_live_component *lttng_live = session->lttng_live_msg_iter->lttng_live_comp; - uint64_t trace_idx, stream_iter_idx; + uint64_t trace_idx; if (!session->lazy_stream_msg_init) { return LTTNG_LIVE_ITERATOR_STATUS_OK; @@ -132,16 +132,13 @@ enum lttng_live_iterator_status lttng_live_lazy_msg_init(struct lttng_live_sessi struct lttng_live_trace *trace = (lttng_live_trace *) g_ptr_array_index(session->traces, trace_idx); - for (stream_iter_idx = 0; stream_iter_idx < trace->stream_iterators->len; - stream_iter_idx++) { + for (lttng_live_stream_iterator::UP& stream_iter : trace->stream_iterators) { struct ctf_trace_class *ctf_tc; - struct lttng_live_stream_iterator *stream_iter = - (lttng_live_stream_iterator *) g_ptr_array_index(trace->stream_iterators, - stream_iter_idx); if (stream_iter->msg_iter) { continue; } + ctf_tc = ctf_metadata_decoder_borrow_ctf_trace_class(trace->metadata->decoder.get()); BT_CPPLOGD_SPEC(stream_iter->logger, "Creating CTF message iterator: session-id={}, ctf-tc-addr={}, " @@ -149,7 +146,7 @@ enum lttng_live_iterator_status lttng_live_lazy_msg_init(struct lttng_live_sessi session->id, fmt::ptr(ctf_tc), stream_iter->name, fmt::ptr(self_msg_iter)); stream_iter->msg_iter = - ctf_msg_iter_create(ctf_tc, lttng_live->max_query_size, medops, stream_iter, + ctf_msg_iter_create(ctf_tc, lttng_live->max_query_size, medops, stream_iter.get(), self_msg_iter, stream_iter->logger); if (!stream_iter->msg_iter) { BT_CPPLOGE_APPEND_CAUSE_SPEC(stream_iter->logger, @@ -216,7 +213,7 @@ lttng_live_stream_iterator_create(struct lttng_live_session *session, uint64_t c stream_iter->name = nameSs.str(); const auto ret = stream_iter.get(); - g_ptr_array_add(trace->stream_iterators, stream_iter.release()); + trace->stream_iterators.emplace_back(std::move(stream_iter)); /* Track the number of active stream iterator. */ session->lttng_live_msg_iter->active_stream_iter++; @@ -229,8 +226,3 @@ lttng_live_stream_iterator::~lttng_live_stream_iterator() /* Track the number of active stream iterator. */ this->trace->session->lttng_live_msg_iter->active_stream_iter--; } - -void lttng_live_stream_iterator_destroy(struct lttng_live_stream_iterator *stream_iter) -{ - delete stream_iter; -} diff --git a/src/plugins/ctf/lttng-live/data-stream.hpp b/src/plugins/ctf/lttng-live/data-stream.hpp index d49a9506..675bbdbb 100644 --- a/src/plugins/ctf/lttng-live/data-stream.hpp +++ b/src/plugins/ctf/lttng-live/data-stream.hpp @@ -18,6 +18,4 @@ struct lttng_live_stream_iterator * lttng_live_stream_iterator_create(struct lttng_live_session *session, uint64_t ctf_trace_id, uint64_t stream_id, bt_self_message_iterator *self_msg_iter); -void lttng_live_stream_iterator_destroy(struct lttng_live_stream_iterator *stream); - #endif /* LTTNG_LIVE_DATA_STREAM_H */ diff --git a/src/plugins/ctf/lttng-live/lttng-live.cpp b/src/plugins/ctf/lttng-live/lttng-live.cpp index 3f74c408..85955bc7 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.cpp +++ b/src/plugins/ctf/lttng-live/lttng-live.cpp @@ -14,6 +14,7 @@ #include "common/assert.h" #include "cpp-common/bt2c/fmt.hpp" #include "cpp-common/bt2c/glib-up.hpp" +#include "cpp-common/bt2c/vector.hpp" #include "cpp-common/bt2s/make-unique.hpp" #include "cpp-common/vendor/fmt/format.h" @@ -92,9 +93,6 @@ static void lttng_live_destroy_trace(struct lttng_live_trace *trace) { BT_CPPLOGD_SPEC(trace->logger, "Destroying live trace: trace-id={}", trace->id); - BT_ASSERT(trace->stream_iterators); - g_ptr_array_free(trace->stream_iterators, TRUE); - delete trace; } @@ -107,9 +105,6 @@ static struct lttng_live_trace *lttng_live_create_trace(struct lttng_live_sessio lttng_live_trace *trace = new lttng_live_trace {session->logger}; trace->session = session; trace->id = trace_id; - trace->stream_iterators = - g_ptr_array_new_with_free_func((GDestroyNotify) lttng_live_stream_iterator_destroy); - BT_ASSERT(trace->stream_iterators); trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED; g_ptr_array_add(session->traces, trace); @@ -1130,7 +1125,6 @@ next_stream_iterator_for_trace(struct lttng_live_msg_iter *lttng_live_msg_iter, uint64_t stream_iter_idx; BT_ASSERT_DBG(live_trace); - BT_ASSERT_DBG(live_trace->stream_iterators); BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger, "Finding the next stream iterator for trace: " @@ -1143,11 +1137,10 @@ next_stream_iterator_for_trace(struct lttng_live_msg_iter *lttng_live_msg_iter, * ensure monotonicity. */ stream_iter_idx = 0; - while (stream_iter_idx < live_trace->stream_iterators->len) { + while (stream_iter_idx < live_trace->stream_iterators.size()) { bool stream_iter_is_ended = false; - struct lttng_live_stream_iterator *stream_iter = - (lttng_live_stream_iterator *) g_ptr_array_index(live_trace->stream_iterators, - stream_iter_idx); + lttng_live_stream_iterator *stream_iter = + live_trace->stream_iterators[stream_iter_idx].get(); /* * If there is no current message for this stream, go fetch @@ -1268,7 +1261,7 @@ next_stream_iterator_for_trace(struct lttng_live_msg_iter *lttng_live_msg_iter, * removed element with the array's last * element. */ - g_ptr_array_remove_index_fast(live_trace->stream_iterators, stream_iter_idx); + bt2c::vectorFastRemove(live_trace->stream_iterators, stream_iter_idx); } } @@ -1280,7 +1273,7 @@ next_stream_iterator_for_trace(struct lttng_live_msg_iter *lttng_live_msg_iter, * The only case where we don't have a candidate for this trace * is if we reached the end of all the iterators. */ - BT_ASSERT(live_trace->stream_iterators->len == 0); + BT_ASSERT(live_trace->stream_iterators.empty()); stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_END; } diff --git a/src/plugins/ctf/lttng-live/lttng-live.hpp b/src/plugins/ctf/lttng-live/lttng-live.hpp index 2fd68425..d8a0f2a7 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.hpp +++ b/src/plugins/ctf/lttng-live/lttng-live.hpp @@ -198,9 +198,7 @@ struct lttng_live_trace const bt_clock_class *clock_class = nullptr; - /* Array of pointers to struct lttng_live_stream_iterator. */ - /* Owned by this. */ - GPtrArray *stream_iterators = nullptr; + std::vector stream_iterators; enum lttng_live_metadata_stream_state metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED;