#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;
}