From 657f1bd6d2c318865e910a3770b492dd0690c2a3 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Tue, 9 Apr 2024 16:36:45 -0400 Subject: [PATCH] src.ctf.fs: make ctf_msg_iter_create return a unique_ptr 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 Reviewed-on: https://review.lttng.org/c/babeltrace/+/8275 Reviewed-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/12313 Tested-by: jenkins --- .../ctf/common/src/msg-iter/msg-iter.cpp | 24 ++++++++++------- .../ctf/common/src/msg-iter/msg-iter.hpp | 18 ++++++++++--- src/plugins/ctf/fs-src/fs.cpp | 26 +++++++++++-------- src/plugins/ctf/lttng-live/data-stream.cpp | 9 ++++--- 4 files changed, 48 insertions(+), 29 deletions(-) diff --git a/src/plugins/ctf/common/src/msg-iter/msg-iter.cpp b/src/plugins/ctf/common/src/msg-iter/msg-iter.cpp index ea9a2472..4ab970bd 100644 --- a/src/plugins/ctf/common/src/msg-iter/msg-iter.cpp +++ b/src/plugins/ctf/common/src/msg-iter/msg-iter.cpp @@ -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) { diff --git a/src/plugins/ctf/common/src/msg-iter/msg-iter.hpp b/src/plugins/ctf/common/src/msg-iter/msg-iter.hpp index 8ad58287..f9bb7f2a 100644 --- a/src/plugins/ctf/common/src/msg-iter/msg-iter.hpp +++ b/src/plugins/ctf/common/src/msg-iter/msg-iter.hpp @@ -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; + /** * 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. diff --git a/src/plugins/ctf/fs-src/fs.cpp b/src/plugins/ctf/fs-src/fs.cpp index b1ac21d1..490de46d 100644 --- a/src/plugins/ctf/fs-src/fs.cpp +++ b/src/plugins/ctf/fs-src/fs.cpp @@ -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(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(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(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(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(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(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; diff --git a/src/plugins/ctf/lttng-live/data-stream.cpp b/src/plugins/ctf/lttng-live/data-stream.cpp index 5ba068c3..3e7386f4 100644 --- a/src/plugins/ctf/lttng-live/data-stream.cpp +++ b/src/plugins/ctf/lttng-live/data-stream.cpp @@ -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"); -- 2.34.1