src.ctf.fs: make ctf_msg_iter_create return a unique_ptr
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 9 Apr 2024 20:36:45 +0000 (16:36 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Wed, 17 Apr 2024 17:57:53 +0000 (13:57 -0400)
Introduce ctf_msg_iter_up, a unique_ptr type with a deleter that calls
ctf_msg_iter_destroy.  Make ctf_msg_iter_create return that.

Change-Id: Ibba15a84c58804a88f18c6ed47b9197fe46541b3
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/8275
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/12313
Tested-by: jenkins <jenkins@lttng.org>
src/plugins/ctf/common/src/msg-iter/msg-iter.cpp
src/plugins/ctf/common/src/msg-iter/msg-iter.hpp
src/plugins/ctf/fs-src/fs.cpp
src/plugins/ctf/lttng-live/data-stream.cpp

index ea9a24721ba97205831723e9ba2e05292dd6fc6e..4ab970bddd9285eb1e66841ba796d59e2d56611d 100644 (file)
@@ -2642,10 +2642,10 @@ end:
     return msg;
 }
 
-struct ctf_msg_iter *ctf_msg_iter_create(struct ctf_trace_class *tc, size_t max_request_sz,
-                                         struct ctf_msg_iter_medium_ops medops, void *data,
-                                         bt_self_message_iterator *self_msg_iter,
-                                         const bt2c::Logger& parentLogger)
+ctf_msg_iter_up ctf_msg_iter_create(struct ctf_trace_class *tc, size_t max_request_sz,
+                                    struct ctf_msg_iter_medium_ops medops, void *data,
+                                    bt_self_message_iterator *self_msg_iter,
+                                    const bt2c::Logger& parentLogger)
 {
     struct bt_bfcr_cbs cbs = {
         .classes =
@@ -2678,13 +2678,13 @@ struct ctf_msg_iter *ctf_msg_iter_create(struct ctf_trace_class *tc, size_t max_
                     "data={}, log-level={}",
                     fmt::ptr(tc), max_request_sz, fmt::ptr(data), logger.level());
 
-    ctf_msg_iter *msg_it = new ctf_msg_iter {std::move(logger)};
+    ctf_msg_iter_up msg_it {new ctf_msg_iter {std::move(logger)}};
     msg_it->self_msg_iter = self_msg_iter;
     msg_it->meta.tc = tc;
     msg_it->medium.medops = medops;
     msg_it->medium.max_request_sz = max_request_sz;
     msg_it->medium.data = data;
-    msg_it->stack = stack_new(msg_it);
+    msg_it->stack = stack_new(msg_it.get());
     msg_it->stored_values = g_array_new(FALSE, TRUE, sizeof(uint64_t));
     g_array_set_size(msg_it->stored_values, tc->stored_value_count);
 
@@ -2693,14 +2693,14 @@ struct ctf_msg_iter *ctf_msg_iter_create(struct ctf_trace_class *tc, size_t max_
         goto error;
     }
 
-    msg_it->bfcr = bt_bfcr_create(cbs, msg_it, msg_it->logger);
+    msg_it->bfcr = bt_bfcr_create(cbs, msg_it.get(), msg_it->logger);
     if (!msg_it->bfcr) {
         BT_CPPLOGE_APPEND_CAUSE_SPEC(msg_it->logger,
                                      "Failed to create binary class reader (BFCR).");
         goto error;
     }
 
-    ctf_msg_iter_reset(msg_it);
+    ctf_msg_iter_reset(msg_it.get());
     BT_CPPLOGD_SPEC(msg_it->logger,
                     "Created CTF plugin message iterator: "
                     "trace-addr={}, max-request-size={}, "
@@ -2713,8 +2713,7 @@ end:
     return msg_it;
 
 error:
-    ctf_msg_iter_destroy(msg_it);
-    msg_it = NULL;
+    msg_it.reset();
     goto end;
 }
 
@@ -2744,6 +2743,11 @@ void ctf_msg_iter_destroy(struct ctf_msg_iter *msg_it)
     delete msg_it;
 }
 
+void ctf_msg_iter_deleter::operator()(ctf_msg_iter *iter) noexcept
+{
+    ctf_msg_iter_destroy(iter);
+}
+
 enum ctf_msg_iter_status ctf_msg_iter_get_next_message(struct ctf_msg_iter *msg_it,
                                                        const bt_message **message)
 {
index 8ad582870013f4a0f191b1cafe6e5bdd8a349b70..f9bb7f2aa01761a932d2c8a08f8f1b49b5131b0d 100644 (file)
@@ -256,6 +256,16 @@ struct ctf_msg_iter_medium_ops
     bt_stream *(*borrow_stream)(bt_stream_class *stream_class, int64_t stream_id, void *data);
 };
 
+/** CTF message iterator. */
+struct ctf_msg_iter;
+
+struct ctf_msg_iter_deleter
+{
+    void operator()(ctf_msg_iter *iter) noexcept;
+};
+
+using ctf_msg_iter_up = std::unique_ptr<ctf_msg_iter, ctf_msg_iter_deleter>;
+
 /**
  * Creates a CTF message iterator.
  *
@@ -272,10 +282,10 @@ struct ctf_msg_iter_medium_ops
  * @returns                    New CTF message iterator on
  *                             success, or \c NULL on error
  */
-struct ctf_msg_iter *ctf_msg_iter_create(struct ctf_trace_class *tc, size_t max_request_sz,
-                                         struct ctf_msg_iter_medium_ops medops, void *medops_data,
-                                         bt_self_message_iterator *self_msg_iter,
-                                         const bt2c::Logger& logger);
+ctf_msg_iter_up ctf_msg_iter_create(struct ctf_trace_class *tc, size_t max_request_sz,
+                                    struct ctf_msg_iter_medium_ops medops, void *medops_data,
+                                    bt_self_message_iterator *self_msg_iter,
+                                    const bt2c::Logger& logger);
 
 /**
  * Destroys a CTF message iterator, freeing all internal resources.
index b1ac21d1e47e067576691c1199f5f945d2adb09e..490de46dbabc24ec9953bd03d1f02ed58b79a40f 100644 (file)
@@ -232,11 +232,13 @@ ctf_fs_iterator_init(bt_self_message_iterator *self_msg_iter,
             goto error;
         }
 
-        msg_iter_data->msg_iter = ctf_msg_iter_create(
-            msg_iter_data->ds_file_group->ctf_fs_trace->metadata->tc,
-            bt_common_get_page_size(static_cast<int>(msg_iter_data->logger.level())) * 8,
-            ctf_fs_ds_group_medops, msg_iter_data->msg_iter_medops_data.get(), self_msg_iter,
-            msg_iter_data->logger);
+        msg_iter_data->msg_iter =
+            ctf_msg_iter_create(
+                msg_iter_data->ds_file_group->ctf_fs_trace->metadata->tc,
+                bt_common_get_page_size(static_cast<int>(msg_iter_data->logger.level())) * 8,
+                ctf_fs_ds_group_medops, msg_iter_data->msg_iter_medops_data.get(), self_msg_iter,
+                msg_iter_data->logger)
+                .release();
         if (!msg_iter_data->msg_iter) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(msg_iter_data->logger,
                                          "Cannot create a CTF message iterator.");
@@ -512,9 +514,10 @@ static int add_ds_file_to_ds_file_group(struct ctf_fs_trace *ctf_fs_trace, const
 
     /* Create a temporary iterator to read the ds_file. */
     msg_iter = ctf_msg_iter_create(
-        ctf_fs_trace->metadata->tc,
-        bt_common_get_page_size(static_cast<int>(ctf_fs_trace->logger.level())) * 8,
-        ctf_fs_ds_file_medops, ds_file.get(), nullptr, ctf_fs_trace->logger);
+                   ctf_fs_trace->metadata->tc,
+                   bt_common_get_page_size(static_cast<int>(ctf_fs_trace->logger.level())) * 8,
+                   ctf_fs_ds_file_medops, ds_file.get(), nullptr, ctf_fs_trace->logger)
+                   .release();
     if (!msg_iter) {
         BT_CPPLOGE_STR_SPEC(ctf_fs_trace->logger, "Cannot create a CTF message iterator.");
         goto error;
@@ -1117,9 +1120,10 @@ static int decode_clock_snapshot_after_event(struct ctf_fs_trace *ctf_fs_trace,
     BT_ASSERT(ctf_fs_trace->metadata->tc);
 
     msg_iter = ctf_msg_iter_create(
-        ctf_fs_trace->metadata->tc,
-        bt_common_get_page_size(static_cast<int>(ctf_fs_trace->logger.level())) * 8,
-        ctf_fs_ds_file_medops, ds_file.get(), NULL, ctf_fs_trace->logger);
+                   ctf_fs_trace->metadata->tc,
+                   bt_common_get_page_size(static_cast<int>(ctf_fs_trace->logger.level())) * 8,
+                   ctf_fs_ds_file_medops, ds_file.get(), NULL, ctf_fs_trace->logger)
+                   .release();
     if (!msg_iter) {
         /* ctf_msg_iter_create() logs errors. */
         ret = -1;
index 5ba068c379eb1c372ff5382aa844d9916fe82f78..3e7386f45fd95665455075c839734875eb19fd2e 100644 (file)
@@ -144,7 +144,8 @@ enum lttng_live_iterator_status lttng_live_lazy_msg_init(struct lttng_live_sessi
                             fmt::ptr(self_msg_iter));
             stream_iter->msg_iter =
                 ctf_msg_iter_create(ctf_tc, lttng_live->max_query_size, medops, stream_iter,
-                                    self_msg_iter, stream_iter->logger);
+                                    self_msg_iter, stream_iter->logger)
+                    .release();
             if (!stream_iter->msg_iter) {
                 BT_CPPLOGE_APPEND_CAUSE_SPEC(stream_iter->logger,
                                              "Failed to create CTF message iterator");
@@ -194,9 +195,9 @@ lttng_live_stream_iterator_create(struct lttng_live_session *session, uint64_t c
         struct ctf_trace_class *ctf_tc =
             ctf_metadata_decoder_borrow_ctf_trace_class(trace->metadata->decoder.get());
         BT_ASSERT(!stream_iter->msg_iter);
-        stream_iter->msg_iter =
-            ctf_msg_iter_create(ctf_tc, lttng_live->max_query_size, medops, stream_iter,
-                                self_msg_iter, stream_iter->logger);
+        stream_iter->msg_iter = ctf_msg_iter_create(ctf_tc, lttng_live->max_query_size, medops,
+                                                    stream_iter, self_msg_iter, stream_iter->logger)
+                                    .release();
         if (!stream_iter->msg_iter) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(stream_iter->logger,
                                          "Failed to create CTF message iterator");
This page took 0.029006 seconds and 4 git commands to generate.