delete ctf_fs_trace;
}
+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;
}
- ctf_fs_trace_destroy(ctf_fs->trace);
-
if (ctf_fs->port_data) {
g_ptr_array_free(ctf_fs->port_data, TRUE);
}
goto error;
}
- ctf_fs->trace = trace;
+ ctf_fs->trace.reset(trace);
} else {
/* Just one trace, it may or may not have a UUID, both are fine. */
- ctf_fs->trace = (ctf_fs_trace *) traces->pdata[0];
+ ctf_fs->trace.reset((ctf_fs_trace *) traces->pdata[0]);
traces->pdata[0] = NULL;
}
- ret = fix_packet_index_tracer_bugs(ctf_fs->trace);
+ ret = fix_packet_index_tracer_bugs(ctf_fs->trace.get());
if (ret) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(ctf_fs->logger, "Failed to fix packet index tracer bugs.");
}
return nullptr;
}
- if (create_streams_for_trace(ctf_fs->trace)) {
+ if (create_streams_for_trace(ctf_fs->trace.get())) {
return nullptr;
}
- if (create_ports_for_trace(ctf_fs.get(), ctf_fs->trace, self_comp_src)) {
+ if (create_ports_for_trace(ctf_fs.get(), ctf_fs->trace.get(), self_comp_src)) {
return nullptr;
}
int bo = 0;
};
+struct ctf_fs_trace_deleter
+{
+ void operator()(ctf_fs_trace *) noexcept;
+};
+
struct ctf_fs_trace
{
+ using UP = std::unique_ptr<ctf_fs_trace, ctf_fs_trace_deleter>;
+
explicit ctf_fs_trace(const bt2c::Logger& parentLogger) :
logger {parentLogger, "PLUGIN/SRC.CTF.FS/TRACE"}
{
/* Array of struct ctf_fs_port_data *, owned by this */
GPtrArray *port_data = nullptr;
- /* Owned by this */
- struct ctf_fs_trace *trace = nullptr;
+ ctf_fs_trace::UP trace;
ctf::src::ClkClsCfg clkClsCfg;
};
const auto result = bt2::ArrayValue::create();
const auto traceInfo = result->appendEmptyMap();
- populate_trace_info(ctf_fs->trace, traceInfo, logger);
+ populate_trace_info(ctf_fs->trace.get(), traceInfo, logger);
return result;
}