src.ctf.lttng-live: make lttng_live_session::traces an std::vector
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 26 Jul 2022 21:40:10 +0000 (17:40 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 23 Aug 2022 16:06:16 +0000 (12:06 -0400)
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Change-Id: I3b8ec1e61929fad1e024955dcfc6708cb125b5c9
Reviewed-on: https://review.lttng.org/c/babeltrace/+/8463
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
src/plugins/ctf/lttng-live/data-stream.cpp
src/plugins/ctf/lttng-live/lttng-live.cpp
src/plugins/ctf/lttng-live/lttng-live.hpp

index 3043c4c2f2f12f08d12c87ca654fa721c41da131..116bd703c05d94e6df6cd4bccbdbf81008d51a5d 100644 (file)
@@ -124,7 +124,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;
     const bt2_common::LogCfg& logCfg = session->logCfg;
 
     if (!session->lazy_stream_msg_init) {
@@ -135,10 +134,7 @@ enum lttng_live_iterator_status lttng_live_lazy_msg_init(struct lttng_live_sessi
              "session-id=%" PRIu64 ", self-msg-iter-addr=%p",
              session->id, 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;
 
index 5484a35085095787f5c93daea10bd4da1dcf8412..ce99ad4352484a51e23f99a91d32b8b9083ae7b8 100644 (file)
@@ -129,29 +129,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)
-{
-    const bt2_common::LogCfg& logCfg = trace->logCfg;
-
-    BT_CLOGD("Destroying live trace: trace-id=%" PRIu64, trace->id);
-
-    delete trace;
+    return nullptr;
 }
 
 static struct lttng_live_trace *lttng_live_create_trace(struct lttng_live_session *session,
@@ -169,7 +153,7 @@ static struct lttng_live_trace *lttng_live_create_trace(struct lttng_live_sessio
     trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED;
 
     lttng_live_trace *ret = trace.get();
-    g_ptr_array_add(session->traces, trace.release());
+    session->traces.emplace_back(std::move(trace));
 
     return ret;
 }
@@ -206,8 +190,6 @@ int lttng_live_add_session(struct lttng_live_msg_iter *lttng_live_msg_iter, uint
     lttng_live_session *session = new lttng_live_session {logCfg};
     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);
@@ -242,10 +224,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);
     }
@@ -418,7 +396,6 @@ lttng_live_get_session(struct lttng_live_msg_iter *lttng_live_msg_iter,
 {
     const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg;
     enum lttng_live_iterator_status status;
-    uint64_t trace_idx;
 
     if (!session->attached) {
         BT_CLOGD("Attach to session: session-id=%" PRIu64, session->id);
@@ -478,16 +455,11 @@ lttng_live_get_session(struct lttng_live_msg_iter *lttng_live_msg_iter,
              "session-id=%" PRIu64 ", session-name=\"%s\"",
              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:
@@ -513,7 +485,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;
     const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg;
 
     for (session_idx = 0; session_idx < lttng_live_msg_iter->sessions->len; session_idx++) {
@@ -523,9 +495,7 @@ lttng_live_force_new_streams_and_metadata(struct lttng_live_msg_iter *lttng_live
                  "session-id=%" PRIu64,
                  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_CLOGD("Force marking trace metadata state as needing an update: "
                      "session-id=%" PRIu64 ", trace-id=%" PRIu64,
                      session->id, trace->id);
@@ -756,7 +726,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;
     const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg;
     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 =
@@ -769,9 +739,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_CLOGD("Need an update for metadata stream: "
                          "session-id=%" PRIu64 ", trace-id=%" PRIu64,
@@ -1368,13 +1336,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);
@@ -1424,10 +1389,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);
+            bt2_common::vectorFastRemove(session->traces, trace_idx);
         }
     }
     if (youngest_candidate_stream_iter) {
@@ -1443,7 +1408,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:
@@ -1576,7 +1541,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
index 1f975770efb3d473c89fd24eeae16d4872af31f5..41cd5c15a2c87b3b70c9bd5815bc8c734bb47a14 100644 (file)
@@ -215,8 +215,7 @@ struct lttng_live_session
 
     uint64_t id = 0;
 
-    /* Array of pointers to struct lttng_live_trace. */
-    GPtrArray *traces = nullptr;
+    std::vector<lttng_live_trace::UP> traces;
 
     bool attached = false;
     bool new_streams_needed = false;
This page took 0.028449 seconds and 5 git commands to generate.