X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Flttng-live%2Fmetadata.cpp;h=693042d7bf228be5acae70c22b82f85887c238f6;hb=refs%2Fheads%2Fmaster;hp=b0a3c5e746a6e93582b085eda11d4a164b6c1cab;hpb=6954b97e32145f8bc34cea22c4ce4fd17abbcb96;p=babeltrace.git diff --git a/src/plugins/ctf/lttng-live/metadata.cpp b/src/plugins/ctf/lttng-live/metadata.cpp index b0a3c5e7..693042d7 100644 --- a/src/plugins/ctf/lttng-live/metadata.cpp +++ b/src/plugins/ctf/lttng-live/metadata.cpp @@ -8,6 +8,7 @@ #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" @@ -36,7 +37,6 @@ static bool stream_classes_all_have_default_clock_class(bt_trace_class *tc, uint64_t i, sc_count; const bt_clock_class *cc = NULL; const bt_stream_class *sc; - bool ret = true; sc_count = bt_trace_class_get_stream_class_count(tc); for (i = 0; i < sc_count; i++) { @@ -46,17 +46,15 @@ static bool stream_classes_all_have_default_clock_class(bt_trace_class *tc, cc = bt_stream_class_borrow_default_clock_class_const(sc); if (!cc) { - ret = false; BT_CPPLOGE_APPEND_CAUSE_SPEC(logger, "Stream class doesn't have a default clock class: " "sc-id={}, sc-name=\"{}\"", bt_stream_class_get_id(sc), bt_stream_class_get_name(sc)); - goto end; + return false; } } -end: - return ret; + return true; } /* * Iterate over the stream classes and returns the first clock class @@ -76,23 +74,21 @@ static const bt_clock_class *borrow_any_clock_class(bt_trace_class *tc) cc = bt_stream_class_borrow_default_clock_class_const(sc); if (cc) { - goto end; + return cc; } } -end: - BT_ASSERT_DBG(cc); - return cc; + + bt_common_abort(); } 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 metadataBuf; bool keep_receiving; bt2c::FileUP fp; enum ctf_metadata_decoder_status decoder_status; - enum lttng_live_iterator_status status = LTTNG_LIVE_ITERATOR_STATUS_OK; enum lttng_live_get_one_metadata_status metadata_status; BT_CPPLOGD_SPEC(metadata->logger, "Updating metadata for trace: session-id={}, trace-id={}", @@ -106,18 +102,17 @@ enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_tra * metadata this indicates that we will never receive * any metadata. */ - status = LTTNG_LIVE_ITERATOR_STATUS_END; + return LTTNG_LIVE_ITERATOR_STATUS_END; } else if (session->new_streams_needed) { - status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN; + return LTTNG_LIVE_ITERATOR_STATUS_AGAIN; } else { session->new_streams_needed = true; - status = LTTNG_LIVE_ITERATOR_STATUS_CONTINUE; + return LTTNG_LIVE_ITERATOR_STATUS_CONTINUE; } - goto end; } if (trace->metadata_stream_state != LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED) { - goto end; + return LTTNG_LIVE_ITERATOR_STATUS_OK; } keep_receiving = true; @@ -162,7 +157,7 @@ enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_tra BT_CPPLOGE_APPEND_CAUSE_SPEC(metadata->logger, "Error getting one trace metadata packet: trace-id={}", trace->id); - goto error; + return LTTNG_LIVE_ITERATOR_STATUS_ERROR; default: bt_common_abort(); } @@ -170,13 +165,12 @@ enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_tra if (metadataBuf.empty()) { if (!trace->trace) { - status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN; - goto end; + return LTTNG_LIVE_ITERATOR_STATUS_AGAIN; } /* The relay sent zero bytes of metadata. */ trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NOT_NEEDED; - goto end; + return LTTNG_LIVE_ITERATOR_STATUS_OK; } /* @@ -187,13 +181,12 @@ enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_tra if (!fp) { if (errno == EINTR && lttng_live_graph_is_canceled(session->lttng_live_msg_iter)) { session->lttng_live_msg_iter->was_interrupted = true; - status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN; + return LTTNG_LIVE_ITERATOR_STATUS_AGAIN; } else { BT_CPPLOGE_ERRNO_APPEND_CAUSE_SPEC(metadata->logger, "Cannot memory-open metadata buffer", "."); - status = LTTNG_LIVE_ITERATOR_STATUS_ERROR; + return LTTNG_LIVE_ITERATOR_STATUS_ERROR; } - goto end; } /* @@ -212,7 +205,7 @@ enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_tra trace->trace = trace->trace_class->instantiate(); if (!trace->trace) { BT_CPPLOGE_APPEND_CAUSE_SPEC(metadata->logger, "Failed to create bt_trace"); - goto error; + return LTTNG_LIVE_ITERATOR_STATUS_ERROR; } ctf_trace_class_configure_ir_trace(tc, *trace->trace); @@ -220,7 +213,7 @@ enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_tra if (!stream_classes_all_have_default_clock_class(trace->trace_class->libObjPtr(), metadata->logger)) { /* Error logged in function. */ - goto error; + return LTTNG_LIVE_ITERATOR_STATUS_ERROR; } trace->clock_class = borrow_any_clock_class(trace->trace_class->libObjPtr()); } @@ -228,17 +221,10 @@ enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_tra /* The metadata was updated successfully. */ trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NOT_NEEDED; - break; + return LTTNG_LIVE_ITERATOR_STATUS_OK; default: - goto error; + return LTTNG_LIVE_ITERATOR_STATUS_ERROR; } - - goto end; - -error: - status = LTTNG_LIVE_ITERATOR_STATUS_ERROR; -end: - return status; } int lttng_live_metadata_create_stream(struct lttng_live_session *session, uint64_t ctf_trace_id, @@ -250,34 +236,21 @@ int lttng_live_metadata_create_stream(struct lttng_live_session *session, uint64 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(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; }