src.ctf.fs: use ctf_msg_iter_up in add_ds_file_to_ds_file_group
[babeltrace.git] / src / plugins / ctf / fs-src / fs.cpp
index 40e50085fa87aabf8543bcbf35a3518c38668195..6b16533cc5bb7e6e2dc6b3ff579d7ae21700857e 100644 (file)
@@ -41,14 +41,6 @@ static void ctf_fs_msg_iter_data_destroy(struct ctf_fs_msg_iter_data *msg_iter_d
         return;
     }
 
-    if (msg_iter_data->msg_iter) {
-        ctf_msg_iter_destroy(msg_iter_data->msg_iter);
-    }
-
-    if (msg_iter_data->msg_iter_medops_data) {
-        ctf_fs_ds_group_medops_data_destroy(msg_iter_data->msg_iter_medops_data);
-    }
-
     delete msg_iter_data;
 }
 
@@ -56,9 +48,8 @@ static bt_message_iterator_class_next_method_status
 ctf_fs_iterator_next_one(struct ctf_fs_msg_iter_data *msg_iter_data, const bt_message **out_msg)
 {
     bt_message_iterator_class_next_method_status status;
-    enum ctf_msg_iter_status msg_iter_status;
-
-    msg_iter_status = ctf_msg_iter_get_next_message(msg_iter_data->msg_iter, out_msg);
+    const auto msg_iter_status =
+        ctf_msg_iter_get_next_message(msg_iter_data->msg_iter.get(), out_msg);
 
     switch (msg_iter_status) {
     case CTF_MSG_ITER_STATUS_OK:
@@ -172,8 +163,8 @@ ctf_fs_iterator_seek_beginning(bt_self_message_iterator *it)
 
         BT_ASSERT(msg_iter_data);
 
-        ctf_msg_iter_reset(msg_iter_data->msg_iter);
-        ctf_fs_ds_group_medops_data_reset(msg_iter_data->msg_iter_medops_data);
+        ctf_msg_iter_reset(msg_iter_data->msg_iter.get());
+        ctf_fs_ds_group_medops_data_reset(msg_iter_data->msg_iter_medops_data.get());
 
         return BT_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHOD_STATUS_OK;
     } catch (const std::bad_alloc&) {
@@ -225,7 +216,7 @@ ctf_fs_iterator_init(bt_self_message_iterator *self_msg_iter,
 
         medium_status = ctf_fs_ds_group_medops_data_create(msg_iter_data->ds_file_group,
                                                            self_msg_iter, msg_iter_data->logger,
-                                                           &msg_iter_data->msg_iter_medops_data);
+                                                           msg_iter_data->msg_iter_medops_data);
         BT_ASSERT(medium_status == CTF_MSG_ITER_MEDIUM_STATUS_OK ||
                   medium_status == CTF_MSG_ITER_MEDIUM_STATUS_ERROR ||
                   medium_status == CTF_MSG_ITER_MEDIUM_STATUS_MEMORY_ERROR);
@@ -239,7 +230,7 @@ ctf_fs_iterator_init(bt_self_message_iterator *self_msg_iter,
         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, self_msg_iter,
+            ctf_fs_ds_group_medops, msg_iter_data->msg_iter_medops_data.get(), self_msg_iter,
             msg_iter_data->logger);
         if (!msg_iter_data->msg_iter) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(msg_iter_data->logger,
@@ -300,29 +291,15 @@ void ctf_fs_trace_deleter::operator()(ctf_fs_trace * const trace) noexcept
     ctf_fs_trace_destroy(trace);
 }
 
-void ctf_fs_destroy(struct ctf_fs_component *ctf_fs)
-{
-    if (!ctf_fs) {
-        return;
-    }
-
-    delete ctf_fs;
-}
-
-void ctf_fs_component_deleter::operator()(ctf_fs_component *comp)
-{
-    ctf_fs_destroy(comp);
-}
-
 ctf_fs_component::UP ctf_fs_component_create(const bt2c::Logger& parentLogger)
 {
-    return ctf_fs_component::UP {new ctf_fs_component {parentLogger}};
+    return bt2s::make_unique<ctf_fs_component>(parentLogger);
 }
 
 void ctf_fs_finalize(bt_self_component_source *component)
 {
-    ctf_fs_destroy((struct ctf_fs_component *) bt_self_component_get_data(
-        bt_self_component_source_as_self_component(component)));
+    ctf_fs_component::UP {static_cast<ctf_fs_component *>(
+        bt_self_component_get_data(bt_self_component_source_as_self_component(component)))};
 }
 
 bt2c::GCharUP ctf_fs_make_port_name(struct ctf_fs_ds_file_group *ds_file_group)
@@ -512,10 +489,9 @@ static int add_ds_file_to_ds_file_group(struct ctf_fs_trace *ctf_fs_trace, const
     struct ctf_fs_ds_file_group *ds_file_group = NULL;
     ctf_fs_ds_file_group::UP new_ds_file_group;
     int ret;
-    struct ctf_fs_ds_file *ds_file = NULL;
     ctf_fs_ds_file_info::UP ds_file_info;
     ctf_fs_ds_index::UP index;
-    struct ctf_msg_iter *msg_iter = NULL;
+    ctf_msg_iter_up msg_iter;
     struct ctf_stream_class *sc = NULL;
     struct ctf_msg_iter_packet_properties props;
 
@@ -523,7 +499,8 @@ static int add_ds_file_to_ds_file_group(struct ctf_fs_trace *ctf_fs_trace, const
      * Create a temporary ds_file to read some properties about the data
      * stream file.
      */
-    ds_file = ctf_fs_ds_file_create(ctf_fs_trace, NULL, path, ctf_fs_trace->logger);
+    const auto ds_file =
+        ctf_fs_ds_file_create(ctf_fs_trace, bt2::Stream::Shared {}, path, ctf_fs_trace->logger);
     if (!ds_file) {
         goto error;
     }
@@ -532,15 +509,15 @@ static int add_ds_file_to_ds_file_group(struct ctf_fs_trace *ctf_fs_trace, const
     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, nullptr, ctf_fs_trace->logger);
+        ctf_fs_ds_file_medops, ds_file.get(), nullptr, ctf_fs_trace->logger);
     if (!msg_iter) {
         BT_CPPLOGE_STR_SPEC(ctf_fs_trace->logger, "Cannot create a CTF message iterator.");
         goto error;
     }
 
-    ctf_msg_iter_set_dry_run(msg_iter, true);
+    ctf_msg_iter_set_dry_run(msg_iter.get(), true);
 
-    ret = ctf_msg_iter_get_packet_properties(msg_iter, &props);
+    ret = ctf_msg_iter_get_packet_properties(msg_iter.get(), &props);
     if (ret) {
         BT_CPPLOGE_APPEND_CAUSE_SPEC(
             ctf_fs_trace->logger,
@@ -571,10 +548,10 @@ static int add_ds_file_to_ds_file_group(struct ctf_fs_trace *ctf_fs_trace, const
         goto error;
     }
 
-    index = ctf_fs_ds_file_build_index(ds_file, ds_file_info.get(), msg_iter);
+    index = ctf_fs_ds_file_build_index(ds_file.get(), ds_file_info.get(), msg_iter.get());
     if (!index) {
         BT_CPPLOGE_APPEND_CAUSE_SPEC(ctf_fs_trace->logger, "Failed to index CTF stream file \'{}\'",
-                                     ds_file->file->path->str);
+                                     ds_file->file->path);
         goto error;
     }
 
@@ -639,12 +616,6 @@ error:
     ret = -1;
 
 end:
-    ctf_fs_ds_file_destroy(ds_file);
-
-    if (msg_iter) {
-        ctf_msg_iter_destroy(msg_iter);
-    }
-
     return ret;
 }
 
@@ -665,8 +636,6 @@ static int create_ds_file_groups(struct ctf_fs_trace *ctf_fs_trace)
     }
 
     while ((basename = g_dir_read_name(dir))) {
-        struct ctf_fs_file *file;
-
         if (strcmp(basename, CTF_FS_METADATA_FILENAME) == 0) {
             /* Ignore the metadata stream. */
             BT_CPPLOGI_SPEC(ctf_fs_trace->logger,
@@ -683,7 +652,7 @@ static int create_ds_file_groups(struct ctf_fs_trace *ctf_fs_trace)
         }
 
         /* Create the file. */
-        file = ctf_fs_file_create(ctf_fs_trace->logger);
+        const auto file = ctf_fs_file_create(ctf_fs_trace->logger);
         if (!file) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(
                 ctf_fs_trace->logger,
@@ -693,40 +662,33 @@ static int create_ds_file_groups(struct ctf_fs_trace *ctf_fs_trace)
         }
 
         /* Create full path string. */
-        g_string_append_printf(file->path, "%s" G_DIR_SEPARATOR_S "%s", ctf_fs_trace->path->str,
-                               basename);
-        if (!g_file_test(file->path->str, G_FILE_TEST_IS_REGULAR)) {
-            BT_CPPLOGI_SPEC(ctf_fs_trace->logger, "Ignoring non-regular file `{}`",
-                            file->path->str);
-            ctf_fs_file_destroy(file);
-            file = NULL;
+        file->path = fmt::format("{}" G_DIR_SEPARATOR_S "{}", ctf_fs_trace->path->str, basename);
+
+        if (!g_file_test(file->path.c_str(), G_FILE_TEST_IS_REGULAR)) {
+            BT_CPPLOGI_SPEC(ctf_fs_trace->logger, "Ignoring non-regular file `{}`", file->path);
             continue;
         }
 
-        ret = ctf_fs_file_open(file, "rb");
+        ret = ctf_fs_file_open(file.get(), "rb");
         if (ret) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(ctf_fs_trace->logger, "Cannot open stream file `{}`",
-                                         file->path->str);
+                                         file->path);
             goto error;
         }
 
         if (file->size == 0) {
             /* Skip empty stream. */
-            BT_CPPLOGI_SPEC(ctf_fs_trace->logger, "Ignoring empty file `{}`", file->path->str);
-            ctf_fs_file_destroy(file);
+            BT_CPPLOGI_SPEC(ctf_fs_trace->logger, "Ignoring empty file `{}`", file->path);
             continue;
         }
 
-        ret = add_ds_file_to_ds_file_group(ctf_fs_trace, file->path->str);
+        ret = add_ds_file_to_ds_file_group(ctf_fs_trace, file->path.c_str());
         if (ret) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(ctf_fs_trace->logger,
                                          "Cannot add stream file `{}` to stream file group",
-                                         file->path->str);
-            ctf_fs_file_destroy(file);
+                                         file->path);
             goto error;
         }
-
-        ctf_fs_file_destroy(file);
     }
 
     goto end;
@@ -1127,7 +1089,6 @@ static int decode_clock_snapshot_after_event(struct ctf_fs_trace *ctf_fs_trace,
                                              int64_t *ts_ns)
 {
     enum ctf_msg_iter_status iter_status = CTF_MSG_ITER_STATUS_OK;
-    struct ctf_fs_ds_file *ds_file = NULL;
     struct ctf_msg_iter *msg_iter = NULL;
     int ret = 0;
 
@@ -1135,7 +1096,8 @@ static int decode_clock_snapshot_after_event(struct ctf_fs_trace *ctf_fs_trace,
     BT_ASSERT(index_entry);
     BT_ASSERT(index_entry->path);
 
-    ds_file = ctf_fs_ds_file_create(ctf_fs_trace, NULL, index_entry->path, ctf_fs_trace->logger);
+    const auto ds_file = ctf_fs_ds_file_create(ctf_fs_trace, bt2::Stream::Shared {},
+                                               index_entry->path, ctf_fs_trace->logger);
     if (!ds_file) {
         BT_CPPLOGE_APPEND_CAUSE_SPEC(ctf_fs_trace->logger, "Failed to create a ctf_fs_ds_file");
         ret = -1;
@@ -1146,9 +1108,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, 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;
@@ -1200,9 +1163,6 @@ static int decode_clock_snapshot_after_event(struct ctf_fs_trace *ctf_fs_trace,
     }
 
 end:
-    if (ds_file) {
-        ctf_fs_ds_file_destroy(ds_file);
-    }
     if (msg_iter) {
         ctf_msg_iter_destroy(msg_iter);
     }
@@ -1835,18 +1795,20 @@ static int create_streams_for_trace(struct ctf_fs_trace *ctf_fs_trace)
         BT_ASSERT(ds_file_group->sc->ir_sc);
         BT_ASSERT(ctf_fs_trace->trace);
 
+        bt_stream *stream;
+
         if (ds_file_group->stream_id == UINT64_C(-1)) {
             /* No stream ID: use 0 */
-            ds_file_group->stream = bt_stream_create_with_id(
-                ds_file_group->sc->ir_sc, ctf_fs_trace->trace, ctf_fs_trace->next_stream_id);
+            stream = bt_stream_create_with_id(ds_file_group->sc->ir_sc, ctf_fs_trace->trace,
+                                              ctf_fs_trace->next_stream_id);
             ctf_fs_trace->next_stream_id++;
         } else {
             /* Specific stream ID */
-            ds_file_group->stream = bt_stream_create_with_id(
-                ds_file_group->sc->ir_sc, ctf_fs_trace->trace, (uint64_t) ds_file_group->stream_id);
+            stream = bt_stream_create_with_id(ds_file_group->sc->ir_sc, ctf_fs_trace->trace,
+                                              (uint64_t) ds_file_group->stream_id);
         }
 
-        if (!ds_file_group->stream) {
+        if (!stream) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(ctf_fs_trace->logger,
                                          "Cannot create stream for DS file group: "
                                          "addr={}, stream-name=\"{}\"",
@@ -1854,12 +1816,14 @@ static int create_streams_for_trace(struct ctf_fs_trace *ctf_fs_trace)
             goto error;
         }
 
-        ret = bt_stream_set_name(ds_file_group->stream, name->str);
+        ds_file_group->stream = bt2::Stream::Shared::createWithoutRef(stream);
+
+        ret = bt_stream_set_name(ds_file_group->stream->libObjPtr(), name->str);
         if (ret) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(ctf_fs_trace->logger,
                                          "Cannot set stream's name: "
                                          "addr={}, stream-name=\"{}\"",
-                                         fmt::ptr(ds_file_group->stream), name->str);
+                                         fmt::ptr(ds_file_group->stream->libObjPtr()), name->str);
             goto error;
         }
 
This page took 0.030038 seconds and 4 git commands to generate.