From bef0ed48439cd4c260cfefeb73de51a925501e93 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Tue, 26 Jul 2022 17:44:19 -0400 Subject: [PATCH] src.ctf.lttng-live: make lttng_live_msg_iter::sessions an std::vector Change-Id: I1c6f23eb1cad89d431699b07ce68673ae9f19963 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/8468 Reviewed-by: Philippe Proulx --- src/plugins/ctf/lttng-live/lttng-live.cpp | 52 +++++-------------- src/plugins/ctf/lttng-live/lttng-live.hpp | 3 +- .../ctf/lttng-live/viewer-connection.cpp | 5 +- 3 files changed, 15 insertions(+), 45 deletions(-) diff --git a/src/plugins/ctf/lttng-live/lttng-live.cpp b/src/plugins/ctf/lttng-live/lttng-live.cpp index 57f28db23..e5bf148b1 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.cpp +++ b/src/plugins/ctf/lttng-live/lttng-live.cpp @@ -195,7 +195,7 @@ int lttng_live_add_session(struct lttng_live_msg_iter *lttng_live_msg_iter, uint session->hostname = hostname; session->session_name = session_name; - g_ptr_array_add(lttng_live_msg_iter->sessions, session.release()); + lttng_live_msg_iter->sessions.emplace_back(std::move(session)); return 0; } @@ -216,21 +216,12 @@ lttng_live_session::~lttng_live_session() } } -static void lttng_live_destroy_session(struct lttng_live_session *session) -{ - delete session; -} - static void lttng_live_msg_iter_destroy(struct lttng_live_msg_iter *lttng_live_msg_iter) { if (!lttng_live_msg_iter) { goto end; } - if (lttng_live_msg_iter->sessions) { - g_ptr_array_free(lttng_live_msg_iter->sessions, TRUE); - } - if (lttng_live_msg_iter->viewer_connection) { live_viewer_connection_destroy(lttng_live_msg_iter->viewer_connection); } @@ -468,12 +459,9 @@ end: static void lttng_live_force_new_streams_and_metadata(struct lttng_live_msg_iter *lttng_live_msg_iter) { - uint64_t session_idx; const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg; - for (session_idx = 0; session_idx < lttng_live_msg_iter->sessions->len; session_idx++) { - struct lttng_live_session *session = - (lttng_live_session *) g_ptr_array_index(lttng_live_msg_iter->sessions, session_idx); + for (lttng_live_session::UP& session : lttng_live_msg_iter->sessions) { BT_CLOGD("Force marking session as needing new streams: " "session-id=%" PRIu64, session->id); @@ -496,8 +484,7 @@ lttng_live_iterator_handle_new_streams_and_metadata(struct lttng_live_msg_iter * enum lttng_live_iterator_status status; enum lttng_live_viewer_status viewer_status; const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg; - uint64_t session_idx = 0, nr_sessions_opened = 0; - struct lttng_live_session *session; + uint64_t nr_sessions_opened = 0; enum session_not_found_action sess_not_found_act = lttng_live_msg_iter->lttng_live_comp->params.sess_not_found_act; @@ -510,7 +497,7 @@ lttng_live_iterator_handle_new_streams_and_metadata(struct lttng_live_msg_iter * * need to query for new sessions even though we have sessions * currently ongoing. */ - if (lttng_live_msg_iter->sessions->len == 0) { + if (lttng_live_msg_iter->sessions.empty()) { if (sess_not_found_act != SESSION_NOT_FOUND_ACTION_CONTINUE) { BT_CLOGD( "No session found. Exiting in accordance with the `session-not-found-action` parameter"); @@ -538,10 +525,8 @@ lttng_live_iterator_handle_new_streams_and_metadata(struct lttng_live_msg_iter * } } - for (session_idx = 0; session_idx < lttng_live_msg_iter->sessions->len; session_idx++) { - session = - (lttng_live_session *) g_ptr_array_index(lttng_live_msg_iter->sessions, session_idx); - status = lttng_live_get_session(lttng_live_msg_iter, session); + for (lttng_live_session::UP& session : lttng_live_msg_iter->sessions) { + status = lttng_live_get_session(lttng_live_msg_iter, session.get()); switch (status) { case LTTNG_LIVE_ITERATOR_STATUS_OK: case LTTNG_LIVE_ITERATOR_STATUS_END: @@ -709,12 +694,8 @@ static enum lttng_live_iterator_status lttng_live_iterator_next_handle_one_activ enum lttng_live_iterator_status ret = LTTNG_LIVE_ITERATOR_STATUS_OK; const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg; enum ctf_msg_iter_status status; - uint64_t session_idx; - - for (session_idx = 0; session_idx < lttng_live_msg_iter->sessions->len; session_idx++) { - struct lttng_live_session *session = - (lttng_live_session *) g_ptr_array_index(lttng_live_msg_iter->sessions, session_idx); + for (lttng_live_session::UP& session : lttng_live_msg_iter->sessions) { if (session->new_streams_needed) { BT_CLOGD("Need an update for streams: " "session-id=%" PRIu64, @@ -1422,7 +1403,6 @@ lttng_live_msg_iter_next(bt_self_message_iterator *self_msg_it, bt_message_array struct lttng_live_component *lttng_live = lttng_live_msg_iter->lttng_live_comp; enum lttng_live_iterator_status stream_iter_status; - uint64_t session_idx; *count = 0; @@ -1454,7 +1434,7 @@ lttng_live_msg_iter_next(bt_self_message_iterator *self_msg_it, bt_message_array * the user, session count will be 0. In this case, we return status * end to return gracefully. */ - if (lttng_live_msg_iter->sessions->len == 0) { + if (lttng_live_msg_iter->sessions.empty()) { if (lttng_live->params.sess_not_found_act != SESSION_NOT_FOUND_ACTION_CONTINUE) { status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END; goto end; @@ -1507,11 +1487,9 @@ lttng_live_msg_iter_next(bt_self_message_iterator *self_msg_it, bt_message_array *candidate_stream_iter = NULL; int64_t youngest_msg_ts_ns = INT64_MAX; - BT_ASSERT_DBG(lttng_live_msg_iter->sessions); - session_idx = 0; - while (session_idx < lttng_live_msg_iter->sessions->len) { - struct lttng_live_session *session = (lttng_live_session *) g_ptr_array_index( - lttng_live_msg_iter->sessions, session_idx); + uint64_t session_idx = 0; + while (session_idx < lttng_live_msg_iter->sessions.size()) { + lttng_live_session *session = lttng_live_msg_iter->sessions[session_idx].get(); /* Find the best candidate message to send downstream. */ stream_iter_status = next_stream_iterator_for_session(lttng_live_msg_iter, session, @@ -1532,7 +1510,7 @@ lttng_live_msg_iter_next(bt_self_message_iterator *self_msg_it, bt_message_array * replaces the the removed element with * the array's last element. */ - g_ptr_array_remove_index_fast(lttng_live_msg_iter->sessions, session_idx); + bt2_common::vectorFastRemove(lttng_live_msg_iter->sessions, session_idx); } else { session_idx++; } @@ -1676,10 +1654,6 @@ lttng_live_msg_iter_create(struct lttng_live_component *lttng_live_comp, lttng_live_msg_iter->last_msg_ts_ns = INT64_MIN; lttng_live_msg_iter->was_interrupted = false; - lttng_live_msg_iter->sessions = - g_ptr_array_new_with_free_func((GDestroyNotify) lttng_live_destroy_session); - BT_ASSERT(lttng_live_msg_iter->sessions); - return lttng_live_msg_iter; } @@ -1744,7 +1718,7 @@ lttng_live_msg_iter_init(bt_self_message_iterator *self_msg_it, goto error; } - if (lttng_live_msg_iter->sessions->len == 0) { + if (lttng_live_msg_iter->sessions.empty()) { switch (lttng_live->params.sess_not_found_act) { case SESSION_NOT_FOUND_ACTION_CONTINUE: BT_CLOGI( diff --git a/src/plugins/ctf/lttng-live/lttng-live.hpp b/src/plugins/ctf/lttng-live/lttng-live.hpp index 654aaf03c..45c686d72 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.hpp +++ b/src/plugins/ctf/lttng-live/lttng-live.hpp @@ -284,8 +284,7 @@ struct lttng_live_msg_iter /* Owned by this. */ struct live_viewer_connection *viewer_connection = nullptr; - /* Array of pointers to struct lttng_live_session. */ - GPtrArray *sessions = nullptr; + std::vector sessions; /* Number of live stream iterator this message iterator has.*/ uint64_t active_stream_iter = 0; diff --git a/src/plugins/ctf/lttng-live/viewer-connection.cpp b/src/plugins/ctf/lttng-live/viewer-connection.cpp index f2f554512..b3c8d282a 100644 --- a/src/plugins/ctf/lttng-live/viewer-connection.cpp +++ b/src/plugins/ctf/lttng-live/viewer-connection.cpp @@ -1304,12 +1304,9 @@ static void lttng_index_to_packet_index(struct lttng_viewer_index *lindex, static void lttng_live_need_new_streams(struct lttng_live_msg_iter *lttng_live_msg_iter) { - uint64_t session_idx; const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg; - for (session_idx = 0; session_idx < lttng_live_msg_iter->sessions->len; session_idx++) { - struct lttng_live_session *session = - (lttng_live_session *) g_ptr_array_index(lttng_live_msg_iter->sessions, session_idx); + for (lttng_live_session::UP& session : lttng_live_msg_iter->sessions) { BT_CLOGD("Marking session as needing new streams: " "session-id=%" PRIu64, session->id); -- 2.34.1