X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Ffs-src%2Ffs.cpp;h=6b16533cc5bb7e6e2dc6b3ff579d7ae21700857e;hb=4420a5b6d2b0fb09f166970d51d6e075f1437fba;hp=40e50085fa87aabf8543bcbf35a3518c38668195;hpb=2fb7af12b8423f1bf00cbbbc7b8766dcc8d3ec15;p=babeltrace.git diff --git a/src/plugins/ctf/fs-src/fs.cpp b/src/plugins/ctf/fs-src/fs.cpp index 40e50085..6b16533c 100644 --- a/src/plugins/ctf/fs-src/fs.cpp +++ b/src/plugins/ctf/fs-src/fs.cpp @@ -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(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(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( + 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(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(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(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; }