struct lttng_live_metadata
{
+ using UP = std::unique_ptr<lttng_live_metadata>;
+
explicit lttng_live_metadata(const bt2c::Logger& parentLogger) :
logger {parentLogger, "PLUGIN/SRC.CTF.LTTNG-LIVE/METADATA"}
{
bt2::TraceClass::Shared trace_class;
- struct lttng_live_metadata *metadata = nullptr;
+ lttng_live_metadata::UP metadata;
const bt_clock_class *clock_class = nullptr;
#include "compat/memstream.h"
#include "cpp-common/bt2c/libc-up.hpp"
+#include "cpp-common/bt2s/make-unique.hpp"
#include "../common/src/metadata/tsdl/ctf-meta-configure-ir-trace.hpp"
#include "../common/src/metadata/tsdl/decoder.hpp"
enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_trace *trace)
{
struct lttng_live_session *session = trace->session;
- struct lttng_live_metadata *metadata = trace->metadata;
+ struct lttng_live_metadata *metadata = trace->metadata.get();
std::vector<char> metadataBuf;
bool keep_receiving;
bt2c::FileUP fp;
cfg.self_comp = session->self_comp;
cfg.create_trace_class = true;
- lttng_live_metadata *metadata = new lttng_live_metadata {session->logger};
+ auto metadata = bt2s::make_unique<lttng_live_metadata>(session->logger);
metadata->stream_id = stream_id;
metadata->decoder = ctf_metadata_decoder_create(&cfg);
if (!metadata->decoder) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(session->logger, "Failed to create CTF metadata decoder");
- goto error;
+ return -1;
}
+
trace = lttng_live_session_borrow_or_create_trace_by_id(session, ctf_trace_id);
if (!trace) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(session->logger, "Failed to borrow trace");
- goto error;
+ return -1;
}
- trace->metadata = metadata;
- return 0;
-
-error:
- delete metadata;
- return -1;
-}
-
-void lttng_live_metadata_fini(struct lttng_live_trace *trace)
-{
- struct lttng_live_metadata *metadata = trace->metadata;
- if (!metadata) {
- return;
- }
- trace->metadata = NULL;
- delete metadata;
+ trace->metadata = std::move(metadata);
+ return 0;
}
std::vector<char> data;
struct lttng_live_session *session = trace->session;
struct lttng_live_msg_iter *lttng_live_msg_iter = session->lttng_live_msg_iter;
- struct lttng_live_metadata *metadata = trace->metadata;
+ struct lttng_live_metadata *metadata = trace->metadata.get();
struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection;
const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq);
char cmd_buf[cmd_buf_len];