src.ctf.lttng-live: make lttng_live_trace::stream_iterators an std::vector
authorSimon Marchi <simon.marchi@efficios.com>
Wed, 22 Jun 2022 21:16:50 +0000 (17:16 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 23 Aug 2022 16:06:16 +0000 (12:06 -0400)
Change-Id: I745900032bc5d880a305e434afaeaeaef728708d
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/8461
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
src/plugins/ctf/lttng-live/data-stream.cpp
src/plugins/ctf/lttng-live/data-stream.hpp
src/plugins/ctf/lttng-live/lttng-live.cpp
src/plugins/ctf/lttng-live/lttng-live.hpp

index 88dab82669308f5b1718e7e3b0ccb1a08ba18861..3043c4c2f2f12f08d12c87ca654fa721c41da131 100644 (file)
@@ -24,6 +24,7 @@
 #include "cpp-common/make-unique.hpp"
 #include "common/assert.h"
 #include "compat/mman.h"
+#include "cpp-common/make-unique.hpp"
 #include "data-stream.hpp"
 #include "cpp-common/cfg-logging-error-reporting.hpp"
 
@@ -123,7 +124,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;
     const bt2_common::LogCfg& logCfg = session->logCfg;
 
     if (!session->lazy_stream_msg_init) {
@@ -138,23 +139,20 @@ 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_CLOGD("Creating CTF message iterator: "
                      "session-id=%" PRIu64 ", ctf-tc-addr=%p, "
                      "stream-iter-name=%s, self-msg-iter-addr=%p",
                      session->id, ctf_tc, stream_iter->name.c_str(), self_msg_iter);
             stream_iter->msg_iter = ctf_msg_iter_create(ctf_tc, lttng_live->max_query_size, medops,
-                                                        stream_iter, self_msg_iter, logCfg);
+                                                        stream_iter.get(), self_msg_iter, logCfg);
             if (!stream_iter->msg_iter) {
                 BT_CLOGE_APPEND_CAUSE("Failed to create CTF message iterator");
                 goto error;
@@ -222,7 +220,7 @@ lttng_live_stream_iterator_create(struct lttng_live_session *session, uint64_t c
     stream_iter->name = nameSs.str();
 
     lttng_live_stream_iterator *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++;
@@ -235,9 +233,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--;
 }
-
-BT_HIDDEN
-void lttng_live_stream_iterator_destroy(struct lttng_live_stream_iterator *stream_iter)
-{
-    delete stream_iter;
-}
index f5052b2490492c5d827f9d5a95d13878accde25d..5078dfd0f01658f115d7f15c65f189be3862aa79 100644 (file)
@@ -22,6 +22,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 */
index 98451576fac0e259b1d39d0ca67dfa8221996397..976d89787ead8a741122f159a45989ad249174bd 100644 (file)
@@ -24,6 +24,7 @@
 #include "cpp-common/exc.hpp"
 #include "cpp-common/glib-up.hpp"
 #include "cpp-common/make-unique.hpp"
+#include "cpp-common/vector.hpp"
 
 #include "plugins/common/muxing/muxing.h"
 #include "plugins/common/param-validation/param-validation.h"
@@ -150,9 +151,6 @@ static void lttng_live_destroy_trace(struct lttng_live_trace *trace)
 
     BT_CLOGD("Destroying live trace: trace-id=%" PRIu64, trace->id);
 
-    BT_ASSERT(trace->stream_iterators);
-    g_ptr_array_free(trace->stream_iterators, TRUE);
-
     delete trace;
 }
 
@@ -168,9 +166,6 @@ static struct lttng_live_trace *lttng_live_create_trace(struct lttng_live_sessio
     lttng_live_trace *trace = new lttng_live_trace {logCfg};
     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);
 
@@ -1194,7 +1189,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_CLOGD("Finding the next stream iterator for trace: "
              "trace-id=%" PRIu64,
@@ -1206,11 +1200,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
@@ -1328,7 +1321,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);
+            bt2_common::vectorFastRemove(live_trace->stream_iterators, stream_iter_idx);
         }
     }
 
@@ -1340,7 +1333,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;
     }
 
index 3884125aba7163414bfd344ec8acb98a8b74ef61..a241991b113ccaa3d530316cf8c39a8d1a5b9310 100644 (file)
@@ -185,9 +185,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<lttng_live_stream_iterator::UP> stream_iterators;
 
     enum lttng_live_metadata_stream_state metadata_stream_state =
         LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED;
This page took 0.027122 seconds and 5 git commands to generate.