X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Flttng-live%2Fviewer-connection.c;h=be9c79e0035347660c98be2ef013b23a29c52f85;hb=0235b0db7de5bcacdb3650c92461f2ce5eb2143d;hp=4f29cda8723a45344cc8a552c7d1998d5465595e;hpb=b197ca376583c58194ed2a4a02dc32ba9efecf01;p=babeltrace.git diff --git a/src/plugins/ctf/lttng-live/viewer-connection.c b/src/plugins/ctf/lttng-live/viewer-connection.c index 4f29cda8..be9c79e0 100644 --- a/src/plugins/ctf/lttng-live/viewer-connection.c +++ b/src/plugins/ctf/lttng-live/viewer-connection.c @@ -1,24 +1,8 @@ /* - * Copyright 2019 - Francis Deslauriers - * Copyright 2016 - Mathieu Desnoyers + * SPDX-License-Identifier: MIT * - * 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 Mathieu Desnoyers */ #define BT_COMP_LOG_SELF_COMP (viewer_connection->self_comp) @@ -412,7 +396,7 @@ end: static enum lttng_live_viewer_status lttng_live_connect_viewer( - struct live_viewer_connection *viewer_connection) + struct live_viewer_connection *viewer_connection) { struct hostent *host; struct sockaddr_in server_addr; @@ -1057,7 +1041,7 @@ end: } BT_HIDDEN -enum lttng_live_viewer_status lttng_live_attach_session( +enum lttng_live_viewer_status lttng_live_session_attach( struct lttng_live_session *session, bt_self_message_iterator *self_msg_iter) { @@ -1159,7 +1143,7 @@ end: } BT_HIDDEN -enum lttng_live_viewer_status lttng_live_detach_session( +enum lttng_live_viewer_status lttng_live_session_detach( struct lttng_live_session *session) { struct lttng_viewer_cmd cmd; @@ -1247,8 +1231,8 @@ enum lttng_live_get_one_metadata_status lttng_live_get_one_metadata_packet( struct lttng_viewer_cmd cmd; struct lttng_viewer_get_metadata rq; struct lttng_viewer_metadata_packet rp; - char *data = NULL; - ssize_t ret_len; + gchar *data = NULL; + ssize_t writelen; struct lttng_live_session *session = trace->session; struct lttng_live_msg_iter *lttng_live_msg_iter = session->lttng_live_msg_iter; @@ -1312,7 +1296,7 @@ enum lttng_live_get_one_metadata_status lttng_live_get_one_metadata_packet( BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Received get_metadata response: unknown"); status = LTTNG_LIVE_GET_ONE_METADATA_STATUS_ERROR; - goto error; + goto end; } len = be64toh(rp.len); @@ -1321,15 +1305,15 @@ enum lttng_live_get_one_metadata_status lttng_live_get_one_metadata_packet( BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Erroneous response length"); status = LTTNG_LIVE_GET_ONE_METADATA_STATUS_ERROR; - goto error; + goto end; } - data = calloc(1, len); + data = g_new0(gchar, len); if (!data) { BT_COMP_LOGE_APPEND_CAUSE_ERRNO(self_comp, "Failed to allocate data buffer", "."); status = LTTNG_LIVE_GET_ONE_METADATA_STATUS_ERROR; - goto error; + goto end; } viewer_status = lttng_live_recv(viewer_connection, data, len); @@ -1337,29 +1321,25 @@ enum lttng_live_get_one_metadata_status lttng_live_get_one_metadata_packet( viewer_handle_recv_status(self_comp, NULL, viewer_status, "get metadata packet"); status = (enum lttng_live_get_one_metadata_status) viewer_status; - goto error; + goto end; } /* * Write the metadata to the file handle. */ - do { - ret_len = fwrite(data, 1, len, fp); - } while (ret_len < 0 && errno == EINTR); - if (ret_len < 0) { + writelen = fwrite(data, sizeof(uint8_t), len, fp); + if (writelen != len) { BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Writing in the metadata file stream"); status = LTTNG_LIVE_GET_ONE_METADATA_STATUS_ERROR; - goto error; + goto end; } - BT_ASSERT(ret_len == len); + *reply_len = len; status = LTTNG_LIVE_GET_ONE_METADATA_STATUS_OK; -error: - free(data); - end: + g_free(data); return status; } @@ -1381,6 +1361,19 @@ void lttng_index_to_packet_index(struct lttng_viewer_index *lindex, pindex->events_discarded = be64toh(lindex->events_discarded); } +static +void lttng_live_need_new_streams(struct lttng_live_msg_iter *lttng_live_msg_iter) +{ + uint64_t session_idx; + + for (session_idx = 0; session_idx < lttng_live_msg_iter->sessions->len; + session_idx++) { + struct lttng_live_session *session = + g_ptr_array_index(lttng_live_msg_iter->sessions, session_idx); + session->new_streams_needed = true; + } +} + BT_HIDDEN enum lttng_live_iterator_status lttng_live_get_next_index( struct lttng_live_msg_iter *lttng_live_msg_iter, @@ -1637,7 +1630,7 @@ end: * Request new streams for a session. */ BT_HIDDEN -enum lttng_live_iterator_status lttng_live_get_new_streams( +enum lttng_live_iterator_status lttng_live_session_get_new_streams( struct lttng_live_session *session, bt_self_message_iterator *self_msg_iter) {