From 7092357654f1e32cea41b1b70d69374e5c655326 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 11 Dec 2023 12:24:09 -0500 Subject: [PATCH] src.ctf.fs: make ctf_visitor_generate_ir::trace_class a bt2::TraceClass::Shared Change-Id: I9b414384b025f39c3cfb9900659235a17426b649 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/8283 Reviewed-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/12321 Tested-by: jenkins --- .../ctf/common/src/metadata/tsdl/ast.hpp | 6 ++++-- .../ctf/common/src/metadata/tsdl/decoder.cpp | 2 +- .../ctf/common/src/metadata/tsdl/decoder.hpp | 3 ++- .../src/metadata/tsdl/visitor-generate-ir.cpp | 19 ++++++++----------- src/plugins/ctf/fs-src/metadata.cpp | 8 ++++++-- src/plugins/ctf/lttng-live/metadata.cpp | 4 +++- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/plugins/ctf/common/src/metadata/tsdl/ast.hpp b/src/plugins/ctf/common/src/metadata/tsdl/ast.hpp index 5c1b71c2..4ee58315 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/ast.hpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/ast.hpp @@ -17,6 +17,7 @@ #include "common/assert.h" #include "common/list.h" +#include "cpp-common/bt2/trace-ir.hpp" #include "cpp-common/vendor/fmt/format.h" /* IWYU pragma: keep */ #include "ctf-meta.hpp" @@ -494,7 +495,7 @@ struct ctf_visitor_generate_ir } /* Trace IR trace class being filled (owned by this) */ - bt_trace_class *trace_class = nullptr; + bt2::TraceClass::Shared trace_class; /* CTF meta trace being filled (owned by this) */ struct ctf_trace_class *ctf_tc = nullptr; @@ -517,7 +518,8 @@ struct ctf_visitor_generate_ir ctf_visitor_generate_ir::UP ctf_visitor_generate_ir_create(const struct ctf_metadata_decoder_config *config); -bt_trace_class *ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *visitor); +bt2::TraceClass::Shared +ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *visitor); struct ctf_trace_class * ctf_visitor_generate_ir_borrow_ctf_trace_class(struct ctf_visitor_generate_ir *visitor); diff --git a/src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp b/src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp index 4dea9b76..7e5e8bb1 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp @@ -361,7 +361,7 @@ end: return status; } -bt_trace_class *ctf_metadata_decoder_get_ir_trace_class(struct ctf_metadata_decoder *mdec) +bt2::TraceClass::Shared ctf_metadata_decoder_get_ir_trace_class(struct ctf_metadata_decoder *mdec) { BT_ASSERT_DBG(mdec); BT_ASSERT_DBG(mdec->config.create_trace_class); diff --git a/src/plugins/ctf/common/src/metadata/tsdl/decoder.hpp b/src/plugins/ctf/common/src/metadata/tsdl/decoder.hpp index a6142cb3..b4dbce87 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/decoder.hpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/decoder.hpp @@ -12,6 +12,7 @@ #include #include "common/uuid.h" +#include "cpp-common/bt2/trace-ir.hpp" #include "cpp-common/bt2c/logging.hpp" #include "cpp-common/vendor/fmt/format.h" /* IWYU pragma: keep */ @@ -133,7 +134,7 @@ ctf_metadata_decoder_append_content(struct ctf_metadata_decoder *metadata_decode * Returns `NULL` if there's none yet or if the metadata decoder is not * configured to create trace classes. */ -bt_trace_class *ctf_metadata_decoder_get_ir_trace_class(struct ctf_metadata_decoder *mdec); +bt2::TraceClass::Shared ctf_metadata_decoder_get_ir_trace_class(struct ctf_metadata_decoder *mdec); /* * Returns the CTF IR trace class of this metadata decoder. diff --git a/src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp b/src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp index 458177a6..ce20624c 100644 --- a/src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp +++ b/src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp @@ -465,8 +465,6 @@ static void ctx_destroy(struct ctf_visitor_generate_ir *ctx) scope = parent_scope; } - bt_trace_class_put_ref(ctx->trace_class); - if (ctx->ctf_tc) { ctf_trace_class_destroy(ctx->ctf_tc); } @@ -491,11 +489,13 @@ ctx_create(const struct ctf_metadata_decoder_config *decoder_config, const bt2c: ctf_visitor_generate_ir::UP ctx {new ctf_visitor_generate_ir {*decoder_config, logger}}; if (decoder_config->self_comp) { - ctx->trace_class = bt_trace_class_create(decoder_config->self_comp); - if (!ctx->trace_class) { + bt_trace_class *trace_class = bt_trace_class_create(decoder_config->self_comp); + if (!trace_class) { BT_CPPLOGE_APPEND_CAUSE_SPEC(ctx->logger, "Cannot create empty trace class."); goto error; } + + ctx->trace_class = bt2::TraceClass::Shared::createWithoutRef(trace_class); } ctx->ctf_tc = ctf_trace_class_create(); @@ -4442,14 +4442,11 @@ void ctf_visitor_generate_ir_deleter::operator()(ctf_visitor_generate_ir *visito ctf_visitor_generate_ir_destroy(visitor); } -bt_trace_class *ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *ctx) +bt2::TraceClass::Shared +ctf_visitor_generate_ir_get_ir_trace_class(struct ctf_visitor_generate_ir *ctx) { BT_ASSERT_DBG(ctx); - if (ctx->trace_class) { - bt_trace_class_get_ref(ctx->trace_class); - } - return ctx->trace_class; } @@ -4683,8 +4680,8 @@ int ctf_visitor_generate_ir_visit_node(struct ctf_visitor_generate_ir *ctx, stru if (ctx->trace_class) { /* Copy new CTF metadata -> new IR metadata */ - ret = - ctf_trace_class_translate(ctx->decoder_config.self_comp, ctx->trace_class, ctx->ctf_tc); + ret = ctf_trace_class_translate(ctx->decoder_config.self_comp, + ctx->trace_class->libObjPtr(), ctx->ctf_tc); if (ret) { ret = -EINVAL; goto end; diff --git a/src/plugins/ctf/fs-src/metadata.cpp b/src/plugins/ctf/fs-src/metadata.cpp index a5402c1d..abddc2bb 100644 --- a/src/plugins/ctf/fs-src/metadata.cpp +++ b/src/plugins/ctf/fs-src/metadata.cpp @@ -62,6 +62,7 @@ int ctf_fs_metadata_set_trace_class(bt_self_component *self_comp, struct ctf_fs_ const ctf::src::ClkClsCfg& clkClsCfg) { int ret = 0; + bt2::TraceClass::Shared traceCls; ctf_metadata_decoder_config decoder_config {ctf_fs_trace->logger}; decoder_config.self_comp = self_comp; @@ -89,9 +90,12 @@ int ctf_fs_metadata_set_trace_class(bt_self_component *self_comp, struct ctf_fs_ goto end; } - ctf_fs_trace->metadata->trace_class = - ctf_metadata_decoder_get_ir_trace_class(ctf_fs_trace->metadata->decoder.get()); + traceCls = ctf_metadata_decoder_get_ir_trace_class(ctf_fs_trace->metadata->decoder.get()); + if (traceCls) { + ctf_fs_trace->metadata->trace_class = traceCls.release().libObjPtr(); + } BT_ASSERT(!self_comp || ctf_fs_trace->metadata->trace_class); + ctf_fs_trace->metadata->tc = ctf_metadata_decoder_borrow_ctf_trace_class(ctf_fs_trace->metadata->decoder.get()); BT_ASSERT(ctf_fs_trace->metadata->tc); diff --git a/src/plugins/ctf/lttng-live/metadata.cpp b/src/plugins/ctf/lttng-live/metadata.cpp index e78b6759..db8ba377 100644 --- a/src/plugins/ctf/lttng-live/metadata.cpp +++ b/src/plugins/ctf/lttng-live/metadata.cpp @@ -233,7 +233,9 @@ enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_tra struct ctf_trace_class *tc = ctf_metadata_decoder_borrow_ctf_trace_class(metadata->decoder.get()); - trace->trace_class = ctf_metadata_decoder_get_ir_trace_class(metadata->decoder.get()); + trace->trace_class = ctf_metadata_decoder_get_ir_trace_class(metadata->decoder.get()) + .release() + .libObjPtr(); trace->trace = bt_trace_create(trace->trace_class); if (!trace->trace) { BT_CPPLOGE_APPEND_CAUSE_SPEC(metadata->logger, "Failed to create bt_trace"); -- 2.34.1