From: Simon Marchi Date: Thu, 7 Dec 2023 05:18:01 +0000 (+0000) Subject: src.ctf.lttng-live: make lttng_live_session::traces an std::vector X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=6dcda123638ff846adbf5d12cdd46ccd834512fd src.ctf.lttng-live: make lttng_live_session::traces an std::vector Signed-off-by: Simon Marchi Change-Id: I3b8ec1e61929fad1e024955dcfc6708cb125b5c9 Reviewed-on: https://review.lttng.org/c/babeltrace/+/8463 Reviewed-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/12379 Tested-by: jenkins --- diff --git a/src/plugins/ctf/lttng-live/data-stream.cpp b/src/plugins/ctf/lttng-live/data-stream.cpp index 0c85fa99..5f6b6703 100644 --- a/src/plugins/ctf/lttng-live/data-stream.cpp +++ b/src/plugins/ctf/lttng-live/data-stream.cpp @@ -117,7 +117,6 @@ 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; if (!session->lazy_stream_msg_init) { return LTTNG_LIVE_ITERATOR_STATUS_OK; @@ -128,10 +127,7 @@ enum lttng_live_iterator_status lttng_live_lazy_msg_init(struct lttng_live_sessi "session-id={}, self-msg-iter-addr={}", session->id, fmt::ptr(self_msg_iter)); - for (trace_idx = 0; trace_idx < session->traces->len; trace_idx++) { - struct lttng_live_trace *trace = - (lttng_live_trace *) g_ptr_array_index(session->traces, trace_idx); - + for (lttng_live_trace::UP& trace : session->traces) { for (lttng_live_stream_iterator::UP& stream_iter : trace->stream_iterators) { struct ctf_trace_class *ctf_tc; diff --git a/src/plugins/ctf/lttng-live/lttng-live.cpp b/src/plugins/ctf/lttng-live/lttng-live.cpp index b1d0cebb..4ecb736c 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.cpp +++ b/src/plugins/ctf/lttng-live/lttng-live.cpp @@ -73,27 +73,13 @@ end: static struct lttng_live_trace * lttng_live_session_borrow_trace_by_id(struct lttng_live_session *session, uint64_t trace_id) { - uint64_t trace_idx; - struct lttng_live_trace *ret_trace = NULL; - - for (trace_idx = 0; trace_idx < session->traces->len; trace_idx++) { - struct lttng_live_trace *trace = - (lttng_live_trace *) g_ptr_array_index(session->traces, trace_idx); + for (lttng_live_trace::UP& trace : session->traces) { if (trace->id == trace_id) { - ret_trace = trace; - goto end; + return trace.get(); } } -end: - return ret_trace; -} - -static void lttng_live_destroy_trace(struct lttng_live_trace *trace) -{ - BT_CPPLOGD_SPEC(trace->logger, "Destroying live trace: trace-id={}", trace->id); - - delete trace; + return nullptr; } static struct lttng_live_trace *lttng_live_create_trace(struct lttng_live_session *session, @@ -109,7 +95,7 @@ static struct lttng_live_trace *lttng_live_create_trace(struct lttng_live_sessio trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED; const auto ret = trace.get(); - g_ptr_array_add(session->traces, trace.release()); + session->traces.emplace_back(std::move(trace)); return ret; } @@ -142,8 +128,6 @@ int lttng_live_add_session(struct lttng_live_msg_iter *lttng_live_msg_iter, uint lttng_live_session *session = new lttng_live_session {lttng_live_msg_iter->logger}; session->self_comp = lttng_live_msg_iter->self_comp; session->id = session_id; - session->traces = g_ptr_array_new_with_free_func((GDestroyNotify) lttng_live_destroy_trace); - BT_ASSERT(session->traces); session->lttng_live_msg_iter = lttng_live_msg_iter; session->new_streams_needed = true; session->hostname = g_string_new(hostname); @@ -178,10 +162,6 @@ static void lttng_live_destroy_session(struct lttng_live_session *session) session->id = -1ULL; } - if (session->traces) { - g_ptr_array_free(session->traces, TRUE); - } - if (session->hostname) { g_string_free(session->hostname, TRUE); } @@ -351,7 +331,6 @@ lttng_live_get_session(struct lttng_live_msg_iter *lttng_live_msg_iter, struct lttng_live_session *session) { enum lttng_live_iterator_status status; - uint64_t trace_idx; if (!session->attached) { BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger, "Attach to session: session-id={}", @@ -416,16 +395,11 @@ lttng_live_get_session(struct lttng_live_msg_iter *lttng_live_msg_iter, "session-id={}, session-name=\"{}\"", session->id, session->session_name->str); - trace_idx = 0; - while (trace_idx < session->traces->len) { - struct lttng_live_trace *trace = - (lttng_live_trace *) g_ptr_array_index(session->traces, trace_idx); - - status = lttng_live_metadata_update(trace); + for (lttng_live_trace::UP& trace : session->traces) { + status = lttng_live_metadata_update(trace.get()); switch (status) { case LTTNG_LIVE_ITERATOR_STATUS_END: case LTTNG_LIVE_ITERATOR_STATUS_OK: - trace_idx++; break; case LTTNG_LIVE_ITERATOR_STATUS_CONTINUE: case LTTNG_LIVE_ITERATOR_STATUS_AGAIN: @@ -452,7 +426,7 @@ end: static void lttng_live_force_new_streams_and_metadata(struct lttng_live_msg_iter *lttng_live_msg_iter) { - uint64_t session_idx, trace_idx; + uint64_t session_idx; for (session_idx = 0; session_idx < lttng_live_msg_iter->sessions->len; session_idx++) { struct lttng_live_session *session = @@ -462,9 +436,7 @@ lttng_live_force_new_streams_and_metadata(struct lttng_live_msg_iter *lttng_live "session-id={}", session->id); session->new_streams_needed = true; - for (trace_idx = 0; trace_idx < session->traces->len; trace_idx++) { - struct lttng_live_trace *trace = - (lttng_live_trace *) g_ptr_array_index(session->traces, trace_idx); + for (lttng_live_trace::UP& trace : session->traces) { BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger, "Force marking trace metadata state as needing an update: " "session-id={}, trace-id={}", @@ -690,7 +662,7 @@ static enum lttng_live_iterator_status lttng_live_iterator_next_handle_one_activ { enum lttng_live_iterator_status ret = LTTNG_LIVE_ITERATOR_STATUS_OK; enum ctf_msg_iter_status status; - uint64_t session_idx, trace_idx; + uint64_t session_idx; for (session_idx = 0; session_idx < lttng_live_msg_iter->sessions->len; session_idx++) { struct lttng_live_session *session = @@ -704,9 +676,7 @@ static enum lttng_live_iterator_status lttng_live_iterator_next_handle_one_activ ret = LTTNG_LIVE_ITERATOR_STATUS_CONTINUE; goto end; } - for (trace_idx = 0; trace_idx < session->traces->len; trace_idx++) { - struct lttng_live_trace *trace = - (lttng_live_trace *) g_ptr_array_index(session->traces, trace_idx); + for (lttng_live_trace::UP& trace : session->traces) { if (trace->metadata_stream_state == LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED) { BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger, "Need an update for metadata stream: " @@ -1308,13 +1278,10 @@ next_stream_iterator_for_session(struct lttng_live_msg_iter *lttng_live_msg_iter goto end; } - BT_ASSERT_DBG(session->traces); - - while (trace_idx < session->traces->len) { + while (trace_idx < session->traces.size()) { bool trace_is_ended = false; struct lttng_live_stream_iterator *stream_iter; - struct lttng_live_trace *trace = - (lttng_live_trace *) g_ptr_array_index(session->traces, trace_idx); + lttng_live_trace *trace = session->traces[trace_idx].get(); stream_iter_status = next_stream_iterator_for_trace(lttng_live_msg_iter, trace, &stream_iter); @@ -1365,10 +1332,10 @@ next_stream_iterator_for_session(struct lttng_live_msg_iter *lttng_live_msg_iter } else { /* * trace_idx is not incremented since - * g_ptr_array_remove_index_fast replaces the + * vectorFastRemove replaces the * element at trace_idx with the array's last element. */ - g_ptr_array_remove_index_fast(session->traces, trace_idx); + bt2c::vectorFastRemove(session->traces, trace_idx); } } if (youngest_candidate_stream_iter) { @@ -1384,7 +1351,7 @@ next_stream_iterator_for_session(struct lttng_live_msg_iter *lttng_live_msg_iter * * In either cases, we return END. */ - BT_ASSERT(session->traces->len == 0); + BT_ASSERT(session->traces.empty()); stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_END; } end: @@ -1514,7 +1481,7 @@ lttng_live_msg_iter_next(bt_self_message_iterator *self_msg_it, bt_message_array * - All live stream iterators have ENDed. */ if (stream_iter_status == LTTNG_LIVE_ITERATOR_STATUS_END) { - if (session->closed && session->traces->len == 0) { + if (session->closed && session->traces.empty()) { /* * Remove the session from the list. * session_idx is not modified since diff --git a/src/plugins/ctf/lttng-live/lttng-live.hpp b/src/plugins/ctf/lttng-live/lttng-live.hpp index f5ad573c..e2b037cb 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.hpp +++ b/src/plugins/ctf/lttng-live/lttng-live.hpp @@ -228,8 +228,7 @@ struct lttng_live_session uint64_t id = 0; - /* Array of pointers to struct lttng_live_trace. */ - GPtrArray *traces = nullptr; + std::vector traces; bool attached = false; bool new_streams_needed = false;