X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=plugins%2Fctf%2Flttng-live%2Fmetadata.c;h=3021f78ab34e26e2b57a13c88ff5a03c024bf990;hb=b19ff26f04df428047676dd736bd7cc9473906fe;hp=d3b7b09567b04ebd8d4583234b618d04a3535624;hpb=4c66436f61db5fcb293f79313f78b6affc83666a;p=babeltrace.git diff --git a/plugins/ctf/lttng-live/metadata.c b/plugins/ctf/lttng-live/metadata.c index d3b7b095..3021f78a 100644 --- a/plugins/ctf/lttng-live/metadata.c +++ b/plugins/ctf/lttng-live/metadata.c @@ -23,6 +23,9 @@ * SOFTWARE. */ +#define BT_LOG_TAG "PLUGIN-CTF-LTTNG-LIVE-SRC-METADATA" +#include "logging.h" + #include #include #include @@ -30,9 +33,7 @@ #include #include #include -#include - -#define BT_LOG_TAG "PLUGIN-CTF-LTTNG-LIVE-METADATA" +#include #include "metadata.h" #include "../common/metadata/decoder.h" @@ -53,31 +54,31 @@ struct packet_header { } __attribute__((__packed__)); static -enum bt_ctf_lttng_live_iterator_status lttng_live_update_clock_map( +enum bt_lttng_live_iterator_status lttng_live_update_clock_map( struct lttng_live_trace *trace) { - enum bt_ctf_lttng_live_iterator_status status = - BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_OK; + enum bt_lttng_live_iterator_status status = + BT_LTTNG_LIVE_ITERATOR_STATUS_OK; size_t i; int count, ret; - BT_PUT(trace->cc_prio_map); + BT_OBJECT_PUT_REF_AND_RESET(trace->cc_prio_map); trace->cc_prio_map = bt_clock_class_priority_map_create(); if (!trace->cc_prio_map) { goto error; } - count = bt_ctf_trace_get_clock_class_count(trace->trace); - assert(count >= 0); + count = bt_trace_get_clock_class_count(trace->trace); + BT_ASSERT(count >= 0); for (i = 0; i < count; i++) { - struct bt_ctf_clock_class *clock_class = - bt_ctf_trace_get_clock_class_by_index(trace->trace, i); + const bt_clock_class *clock_class = + bt_trace_get_clock_class_by_index(trace->trace, i); - assert(clock_class); + BT_ASSERT(clock_class); ret = bt_clock_class_priority_map_add_clock_class( trace->cc_prio_map, clock_class, 0); - BT_PUT(clock_class); + BT_CLOCK_CLASS_PUT_REF_AND_RESET(clock_class); if (ret) { goto error; @@ -86,13 +87,13 @@ enum bt_ctf_lttng_live_iterator_status lttng_live_update_clock_map( goto end; error: - status = BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_ERROR; + status = BT_LTTNG_LIVE_ITERATOR_STATUS_ERROR; end: return status; } BT_HIDDEN -enum bt_ctf_lttng_live_iterator_status lttng_live_metadata_update( +enum bt_lttng_live_iterator_status lttng_live_metadata_update( struct lttng_live_trace *trace) { struct lttng_live_session *session = trace->session; @@ -102,20 +103,24 @@ enum bt_ctf_lttng_live_iterator_status lttng_live_metadata_update( char *metadata_buf = NULL; FILE *fp = NULL; enum ctf_metadata_decoder_status decoder_status; - enum bt_ctf_lttng_live_iterator_status status = - BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_OK; + enum bt_lttng_live_iterator_status status = + BT_LTTNG_LIVE_ITERATOR_STATUS_OK; /* No metadata stream yet. */ if (!metadata) { if (session->new_streams_needed) { - status = BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_AGAIN; + status = BT_LTTNG_LIVE_ITERATOR_STATUS_AGAIN; } else { session->new_streams_needed = true; - status = BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_CONTINUE; + status = BT_LTTNG_LIVE_ITERATOR_STATUS_CONTINUE; } goto end; } + if (!metadata->trace) { + trace->new_metadata_needed = false; + } + if (!trace->new_metadata_needed) { goto end; } @@ -155,10 +160,11 @@ enum bt_ctf_lttng_live_iterator_status lttng_live_metadata_update( * the data streams are done. */ lttng_live_unref_trace(metadata->trace); + metadata->trace = NULL; } if (errno == EINTR) { - if (bt_graph_is_canceled(session->lttng_live->graph)) { - status = BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_AGAIN; + if (lttng_live_is_canceled(session->lttng_live)) { + status = BT_LTTNG_LIVE_ITERATOR_STATUS_AGAIN; goto end; } } @@ -172,17 +178,13 @@ enum bt_ctf_lttng_live_iterator_status lttng_live_metadata_update( if (len_read == 0) { if (!trace->trace) { - status = BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_AGAIN; + status = BT_LTTNG_LIVE_ITERATOR_STATUS_AGAIN; goto end; } trace->new_metadata_needed = false; goto end; } - if (babeltrace_debug) { - // yydebug = 1; - } - fp = bt_fmemopen(metadata_buf, len_read, "rb"); if (!fp) { BT_LOGE("Cannot memory-open metadata buffer: %s", @@ -193,16 +195,16 @@ enum bt_ctf_lttng_live_iterator_status lttng_live_metadata_update( decoder_status = ctf_metadata_decoder_decode(metadata->decoder, fp); switch (decoder_status) { case CTF_METADATA_DECODER_STATUS_OK: - BT_PUT(trace->trace); + BT_OBJECT_PUT_REF_AND_RESET(trace->trace); trace->trace = ctf_metadata_decoder_get_trace(metadata->decoder); trace->new_metadata_needed = false; status = lttng_live_update_clock_map(trace); - if (status != BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_OK) { + if (status != BT_LTTNG_LIVE_ITERATOR_STATUS_OK) { goto end; } break; case CTF_METADATA_DECODER_STATUS_INCOMPLETE: - status = BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_AGAIN; + status = BT_LTTNG_LIVE_ITERATOR_STATUS_AGAIN; break; case CTF_METADATA_DECODER_STATUS_ERROR: case CTF_METADATA_DECODER_STATUS_INVAL_VERSION: @@ -212,7 +214,7 @@ enum bt_ctf_lttng_live_iterator_status lttng_live_metadata_update( goto end; error: - status = BT_CTF_LTTNG_LIVE_ITERATOR_STATUS_ERROR; + status = BT_LTTNG_LIVE_ITERATOR_STATUS_ERROR; end: if (fp) { int closeret; @@ -222,16 +224,19 @@ end: BT_LOGE("Error on fclose"); } } + free(metadata_buf); return status; } BT_HIDDEN int lttng_live_metadata_create_stream(struct lttng_live_session *session, uint64_t ctf_trace_id, - uint64_t stream_id) + uint64_t stream_id, + const char *trace_name) { struct lttng_live_metadata *metadata = NULL; struct lttng_live_trace *trace; + const char *match; metadata = g_new0(struct lttng_live_metadata, 1); if (!metadata) { @@ -239,7 +244,12 @@ int lttng_live_metadata_create_stream(struct lttng_live_session *session, } metadata->stream_id = stream_id; //TODO: add clock offset option - metadata->decoder = ctf_metadata_decoder_create(stderr, 0); + match = strstr(trace_name, session->session_name->str); + if (!match) { + goto error; + } + metadata->decoder = ctf_metadata_decoder_create(NULL, + match); if (!metadata->decoder) { goto error; } @@ -270,7 +280,6 @@ void lttng_live_metadata_fini(struct lttng_live_trace *trace) } ctf_metadata_decoder_destroy(metadata->decoder); trace->metadata = NULL; - lttng_live_unref_trace(trace); if (!metadata->closed) { lttng_live_unref_trace(metadata->trace); }