return ret;
}
-struct ctf_metadata_decoder *
+ctf_metadata_decoder_up
ctf_metadata_decoder_create(const struct ctf_metadata_decoder_config *config)
{
BT_ASSERT(config);
mdec = NULL;
end:
- return mdec;
+ return ctf_metadata_decoder_up {mdec};
}
void ctf_metadata_decoder_destroy(struct ctf_metadata_decoder *mdec)
delete mdec;
}
+void ctf_metadata_decoder_deleter::operator()(ctf_metadata_decoder *decoder)
+{
+ ctf_metadata_decoder_destroy(decoder);
+}
+
enum ctf_metadata_decoder_status
ctf_metadata_decoder_append_content(struct ctf_metadata_decoder *mdec, FILE *fp)
{
bool keep_plain_text = false;
};
+struct ctf_metadata_decoder_deleter
+{
+ void operator()(struct ctf_metadata_decoder *decoder);
+};
+
+using ctf_metadata_decoder_up = std::unique_ptr<ctf_metadata_decoder, ctf_metadata_decoder_deleter>;
+
/*
* Creates a CTF metadata decoder.
*
* Returns `NULL` on error.
*/
-struct ctf_metadata_decoder *
+ctf_metadata_decoder_up
ctf_metadata_decoder_create(const struct ctf_metadata_decoder_config *config);
/*
#include "cpp-common/bt2c/logging.hpp"
#include "metadata.hpp"
+#include "plugins/ctf/common/src/metadata/tsdl/decoder.hpp"
extern bool ctf_fs_debug;
struct ctf_fs_metadata
{
/* Owned by this */
- struct ctf_metadata_decoder *decoder = nullptr;
+ ctf_metadata_decoder_up decoder;
/* Owned by this */
bt_trace_class *trace_class = nullptr;
goto end;
}
- ret = ctf_metadata_decoder_append_content(ctf_fs_trace->metadata->decoder, file->fp);
+ ret = ctf_metadata_decoder_append_content(ctf_fs_trace->metadata->decoder.get(), file->fp);
if (ret) {
BT_CPPLOGE_SPEC(ctf_fs_trace->logger, "Cannot update metadata decoder's content.");
goto end;
}
ctf_fs_trace->metadata->trace_class =
- ctf_metadata_decoder_get_ir_trace_class(ctf_fs_trace->metadata->decoder);
+ ctf_metadata_decoder_get_ir_trace_class(ctf_fs_trace->metadata->decoder.get());
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);
+ ctf_metadata_decoder_borrow_ctf_trace_class(ctf_fs_trace->metadata->decoder.get());
BT_ASSERT(ctf_fs_trace->metadata->tc);
end:
BT_TRACE_CLASS_PUT_REF_AND_RESET(metadata->trace_class);
}
- if (metadata->decoder) {
- ctf_metadata_decoder_destroy(metadata->decoder);
- }
+ metadata->decoder.reset();
}
int bo;
const char *path;
bool is_packetized;
- struct ctf_metadata_decoder *decoder = NULL;
+ ctf_metadata_decoder_up decoder;
ctf_metadata_decoder_config decoder_cfg {logger};
enum ctf_metadata_decoder_status decoder_status;
GString *g_metadata_text = NULL;
}
rewind(metadata_fp.get());
- decoder_status = ctf_metadata_decoder_append_content(decoder, metadata_fp.get());
+ decoder_status = ctf_metadata_decoder_append_content(decoder.get(), metadata_fp.get());
if (decoder_status) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(
logger, "Cannot update metadata decoder's content: path=\"{}\".", path);
goto error;
}
- plaintext = ctf_metadata_decoder_get_text(decoder);
+ plaintext = ctf_metadata_decoder_get_text(decoder.get());
g_metadata_text = g_string_new(NULL);
if (!g_metadata_text) {
}
g_string_append(g_metadata_text, plaintext);
-
ret = bt_value_map_insert_string_entry(result, "text", g_metadata_text->str);
if (ret) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(logger, "Cannot insert metadata text into query result.");
if (g_metadata_text) {
g_string_free(g_metadata_text, TRUE);
}
- ctf_metadata_decoder_destroy(decoder);
*user_result = result;
return status;
double weight = 0;
bt2c::GCharUP metadata_path;
bt_value *result = NULL;
- struct ctf_metadata_decoder *metadata_decoder = NULL;
+ ctf_metadata_decoder_up metadata_decoder;
FILE *metadata_file = NULL;
char uuid_str[BT_UUID_STR_LEN + 1];
bool has_uuid = false;
goto end;
}
- decoder_status = ctf_metadata_decoder_append_content(metadata_decoder, metadata_file);
+ decoder_status = ctf_metadata_decoder_append_content(metadata_decoder.get(), metadata_file);
if (decoder_status != CTF_METADATA_DECODER_STATUS_OK) {
BT_CPPLOGW_SPEC(logger, "cannot append metadata content: metadata-decoder-status={}",
decoder_status);
weight = 0.75;
/* If the trace has a UUID, return the stringified UUID as the group. */
- if (ctf_metadata_decoder_get_trace_class_uuid(metadata_decoder, uuid) == 0) {
+ if (ctf_metadata_decoder_get_trace_class_uuid(metadata_decoder.get(), uuid) == 0) {
bt_uuid_to_str(uuid, uuid_str);
has_uuid = true;
}
end:
bt_value_put_ref(result);
- ctf_metadata_decoder_destroy(metadata_decoder);
return status;
}
if (stream_iter->msg_iter) {
continue;
}
- ctf_tc = ctf_metadata_decoder_borrow_ctf_trace_class(trace->metadata->decoder);
+ ctf_tc = ctf_metadata_decoder_borrow_ctf_trace_class(trace->metadata->decoder.get());
BT_CPPLOGD_SPEC(stream_iter->logger,
"Creating CTF message iterator: session-id={}, ctf-tc-addr={}, "
"stream-iter-name={}, self-msg-iter-addr={}",
if (trace->trace) {
struct ctf_trace_class *ctf_tc =
- ctf_metadata_decoder_borrow_ctf_trace_class(trace->metadata->decoder);
+ ctf_metadata_decoder_borrow_ctf_trace_class(trace->metadata->decoder.get());
BT_ASSERT(!stream_iter->msg_iter);
stream_iter->msg_iter =
ctf_msg_iter_create(ctf_tc, lttng_live->max_query_size, medops, stream_iter,
bt2c::Logger logger;
uint64_t stream_id = 0;
+
/* Weak reference. */
- struct ctf_metadata_decoder *decoder = nullptr;
+ ctf_metadata_decoder_up decoder;
};
enum lttng_live_metadata_stream_state
* new metadata to our current trace class.
*/
BT_CPPLOGD_SPEC(metadata->logger, "Appending new metadata to the ctf_trace class");
- decoder_status = ctf_metadata_decoder_append_content(metadata->decoder, fp);
+ decoder_status = ctf_metadata_decoder_append_content(metadata->decoder.get(), fp);
switch (decoder_status) {
case CTF_METADATA_DECODER_STATUS_OK:
if (!trace->trace_class) {
struct ctf_trace_class *tc =
- ctf_metadata_decoder_borrow_ctf_trace_class(metadata->decoder);
+ ctf_metadata_decoder_borrow_ctf_trace_class(metadata->decoder.get());
- trace->trace_class = ctf_metadata_decoder_get_ir_trace_class(metadata->decoder);
+ trace->trace_class = ctf_metadata_decoder_get_ir_trace_class(metadata->decoder.get());
trace->trace = bt_trace_create(trace->trace_class);
if (!trace->trace) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(metadata->logger, "Failed to create bt_trace");
return 0;
error:
- ctf_metadata_decoder_destroy(metadata->decoder);
delete metadata;
return -1;
}
if (!metadata) {
return;
}
- ctf_metadata_decoder_destroy(metadata->decoder);
trace->metadata = NULL;
delete metadata;
}