X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Flttng-live%2Fmetadata.c;h=859a36de954e31f491c4e4762076a553a5fa184b;hb=0235b0db7de5bcacdb3650c92461f2ce5eb2143d;hp=d347534da7e006457c845df89e33bac3ad4b24cd;hpb=ecb4ba8aa48c8d0deab589b7c1f4c999a52aa355;p=babeltrace.git diff --git a/src/plugins/ctf/lttng-live/metadata.c b/src/plugins/ctf/lttng-live/metadata.c index d347534d..859a36de 100644 --- a/src/plugins/ctf/lttng-live/metadata.c +++ b/src/plugins/ctf/lttng-live/metadata.c @@ -1,27 +1,9 @@ /* - * Copyright 2019 - Francis Deslauriers - * Copyright 2016 - Philippe Proulx - * Copyright 2010-2011 - EfficiOS Inc. and Linux Foundation + * SPDX-License-Identifier: MIT * - * Some functions are based on older functions written by Mathieu Desnoyers. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. + * Copyright 2019 Francis Deslauriers + * Copyright 2016 Philippe Proulx + * Copyright 2010-2011 EfficiOS Inc. and Linux Foundation */ #define BT_COMP_LOG_SELF_COMP self_comp @@ -145,11 +127,7 @@ enum lttng_live_iterator_status lttng_live_metadata_update( goto end; } - if (!metadata->trace) { - trace->new_metadata_needed = false; - } - - if (!trace->new_metadata_needed) { + if (trace->metadata_stream_state != LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED) { goto end; } @@ -201,7 +179,14 @@ enum lttng_live_iterator_status lttng_live_metadata_update( BT_COMP_LOGD("Metadata stream was closed by the Relay, the trace is no longer active: " "trace-id=%"PRIu64", metadata-stream-id=%"PRIu64, trace->id, metadata->stream_id); + /* + * The stream was closed and we received everything + * there was to receive for this metadata stream. + * We go on with the decoding of what we received. So + * that data stream can be decoded. + */ keep_receiving = false; + trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_CLOSED; break; case LTTNG_LIVE_GET_ONE_METADATA_STATUS_ERROR: BT_COMP_LOGE_APPEND_CAUSE(self_comp, @@ -213,15 +198,6 @@ enum lttng_live_iterator_status lttng_live_metadata_update( } } - /* - * A closed metadata stream means the trace is no longer active. Return - * _END so that the caller can remove the trace from its list. - */ - if (metadata_status == LTTNG_LIVE_GET_ONE_METADATA_STATUS_CLOSED) { - status = LTTNG_LIVE_ITERATOR_STATUS_END; - goto end; - } - /* The memory buffer `metadata_buf` contains all the metadata. */ if (bt_close_memstream(&metadata_buf, &size, fp)) { BT_COMP_LOGW_ERRNO("Metadata bt_close_memstream", "."); @@ -234,7 +210,9 @@ enum lttng_live_iterator_status lttng_live_metadata_update( status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN; goto end; } - trace->new_metadata_needed = false; + + /* The relay sent zero bytes of metdata. */ + trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NOT_NEEDED; goto end; } @@ -294,7 +272,9 @@ enum lttng_live_iterator_status lttng_live_metadata_update( trace->clock_class = borrow_any_clock_class(trace->trace_class); } - trace->new_metadata_needed = false; + + /* The metadata was updated succesfully. */ + trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NOT_NEEDED; break; case CTF_METADATA_DECODER_STATUS_INCOMPLETE: @@ -352,13 +332,13 @@ int lttng_live_metadata_create_stream(struct lttng_live_session *session, "Failed to create CTF metadata decoder"); goto error; } - trace = lttng_live_borrow_trace(session, ctf_trace_id); + trace = lttng_live_session_borrow_or_create_trace_by_id(session, + ctf_trace_id); if (!trace) { BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Failed to borrow trace"); goto error; } - metadata->trace = trace; trace->metadata = metadata; return 0;