From: Simon Marchi Date: Tue, 5 Dec 2023 04:06:35 +0000 (+0000) Subject: src.ctf.fs: make ctf_fs_ds_group_medops_data_create return a unique_ptr X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=3cf881822eefe10ba81e7ee2508f0041a05f3e3d src.ctf.fs: make ctf_fs_ds_group_medops_data_create return a unique_ptr Introduce ctf_fs_ds_group_medops_data_up, a unique_ptr type with a deleter that calls ctf_fs_ds_group_medops_data_destroy. Make ctf_fs_ds_group_medops_data_create return (by parameter) a value of this type. Change ctf_fs_msg_iter_data::msg_iter_medops_data to be of this type too, since the result of ctf_fs_ds_group_medops_data_create is put directly in that field. Change-Id: I971e2e6db622f5cfe492eaede239852886a24483 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/8272 Reviewed-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/12310 Tested-by: jenkins --- diff --git a/src/plugins/ctf/fs-src/data-stream-file.cpp b/src/plugins/ctf/fs-src/data-stream-file.cpp index c456104c..73d4751b 100644 --- a/src/plugins/ctf/fs-src/data-stream-file.cpp +++ b/src/plugins/ctf/fs-src/data-stream-file.cpp @@ -389,18 +389,24 @@ end: return; } +void ctf_fs_ds_group_medops_data_deleter::operator()(ctf_fs_ds_group_medops_data *data) noexcept +{ + ctf_fs_ds_group_medops_data_destroy(data); +} + enum ctf_msg_iter_medium_status ctf_fs_ds_group_medops_data_create( struct ctf_fs_ds_file_group *ds_file_group, bt_self_message_iterator *self_msg_iter, - const bt2c::Logger& parentLogger, struct ctf_fs_ds_group_medops_data **out) + const bt2c::Logger& parentLogger, ctf_fs_ds_group_medops_data_up& out) { BT_ASSERT(self_msg_iter); BT_ASSERT(ds_file_group); BT_ASSERT(ds_file_group->index); BT_ASSERT(!ds_file_group->index->entries.empty()); - ctf_fs_ds_group_medops_data *data = new ctf_fs_ds_group_medops_data {parentLogger}; - data->ds_file_group = ds_file_group; - data->self_msg_iter = self_msg_iter; + out.reset(new ctf_fs_ds_group_medops_data {parentLogger}); + + out->ds_file_group = ds_file_group; + out->self_msg_iter = self_msg_iter; /* * No need to prepare the first file. ctf_msg_iter will call @@ -408,7 +414,6 @@ enum ctf_msg_iter_medium_status ctf_fs_ds_group_medops_data_create( * done then. */ - *out = data; return CTF_MSG_ITER_MEDIUM_STATUS_OK; } diff --git a/src/plugins/ctf/fs-src/data-stream-file.hpp b/src/plugins/ctf/fs-src/data-stream-file.hpp index 71c31e23..d5db8cfc 100644 --- a/src/plugins/ctf/fs-src/data-stream-file.hpp +++ b/src/plugins/ctf/fs-src/data-stream-file.hpp @@ -181,9 +181,18 @@ extern struct ctf_msg_iter_medium_ops ctf_fs_ds_file_medops; */ extern struct ctf_msg_iter_medium_ops ctf_fs_ds_group_medops; -enum ctf_msg_iter_medium_status ctf_fs_ds_group_medops_data_create( - struct ctf_fs_ds_file_group *ds_file_group, bt_self_message_iterator *self_msg_iter, - const bt2c::Logger& logger, struct ctf_fs_ds_group_medops_data **out); +struct ctf_fs_ds_group_medops_data_deleter +{ + void operator()(struct ctf_fs_ds_group_medops_data *data) noexcept; +}; + +using ctf_fs_ds_group_medops_data_up = + std::unique_ptr; + +enum ctf_msg_iter_medium_status +ctf_fs_ds_group_medops_data_create(struct ctf_fs_ds_file_group *ds_file_group, + bt_self_message_iterator *self_msg_iter, + const bt2c::Logger& logger, ctf_fs_ds_group_medops_data_up& out); void ctf_fs_ds_group_medops_data_reset(struct ctf_fs_ds_group_medops_data *data); diff --git a/src/plugins/ctf/fs-src/fs.cpp b/src/plugins/ctf/fs-src/fs.cpp index 00985e6d..f2582a82 100644 --- a/src/plugins/ctf/fs-src/fs.cpp +++ b/src/plugins/ctf/fs-src/fs.cpp @@ -45,10 +45,6 @@ static void ctf_fs_msg_iter_data_destroy(struct ctf_fs_msg_iter_data *msg_iter_d 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; } @@ -173,7 +169,7 @@ 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_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 +221,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 +235,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, diff --git a/src/plugins/ctf/fs-src/fs.hpp b/src/plugins/ctf/fs-src/fs.hpp index 52e6761b..530f0fb3 100644 --- a/src/plugins/ctf/fs-src/fs.hpp +++ b/src/plugins/ctf/fs-src/fs.hpp @@ -132,7 +132,7 @@ struct ctf_fs_msg_iter_data BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK; const struct bt_error *next_saved_error = nullptr; - struct ctf_fs_ds_group_medops_data *msg_iter_medops_data = nullptr; + ctf_fs_ds_group_medops_data_up msg_iter_medops_data; }; bt_component_class_initialize_method_status