src.ctf.fs: make ctf_visitor_generate_ir::trace_class a bt2::TraceClass::Shared
authorSimon Marchi <simon.marchi@efficios.com>
Mon, 11 Dec 2023 17:24:09 +0000 (12:24 -0500)
committerSimon Marchi <simon.marchi@efficios.com>
Wed, 17 Apr 2024 17:57:53 +0000 (13:57 -0400)
Change-Id: I9b414384b025f39c3cfb9900659235a17426b649
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/8283
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/12321
Tested-by: jenkins <jenkins@lttng.org>
src/plugins/ctf/common/src/metadata/tsdl/ast.hpp
src/plugins/ctf/common/src/metadata/tsdl/decoder.cpp
src/plugins/ctf/common/src/metadata/tsdl/decoder.hpp
src/plugins/ctf/common/src/metadata/tsdl/visitor-generate-ir.cpp
src/plugins/ctf/fs-src/metadata.cpp
src/plugins/ctf/lttng-live/metadata.cpp

index 5c1b71c2c7b868fe9ec21947e79e3081d8456c84..4ee583156891e480bf1f6721c1dc6bf8c4388fbb 100644 (file)
@@ -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);
index 4dea9b76be07a89fb6a60d671a0c4ba8f51ece44..7e5e8bb117532548be037d290588b0fa8e111651 100644 (file)
@@ -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);
index a6142cb3ab05ce295053f4ddd7779c9e193991df..b4dbce875dcb0d33a772eb2fb075ee1ae3338696 100644 (file)
@@ -12,6 +12,7 @@
 #include <babeltrace2/babeltrace.h>
 
 #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.
index 458177a6d6b9e20eccce56f09a80976f21943670..ce20624c8f3a067008e75c0728ec86d99cdad4a8 100644 (file)
@@ -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;
index a5402c1dec0f742df9ba4e4fc0ad284a26546742..abddc2bb06952c5d9b3feaa4faab8abdf2288690 100644 (file)
@@ -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);
index e78b675933c99106cad7a880c87fe7bf958b5afd..db8ba37711f737a75c857b7aa0eed39aaf8c39c3 100644 (file)
@@ -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");
This page took 0.030887 seconds and 4 git commands to generate.