From d721bef811f32354df7dbf0a673e4f88329e0fc0 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 11 Dec 2023 13:35:07 -0500 Subject: [PATCH] src.ctf.lttng-live: introduce live_viewer_connection::UP and use it Change lttng_live_msg_iter::viewer_connection to be a live_viewer_connection::UP and convert live_viewer_connection_create's output parameter to that type. Signed-off-by: Simon Marchi Change-Id: I0f91d4636c67ad9f820783932fa3c45464dfb3bb Reviewed-on: https://review.lttng.org/c/babeltrace/+/8472 Reviewed-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/12387 Tested-by: jenkins --- src/plugins/ctf/lttng-live/lttng-live.cpp | 13 ++--- src/plugins/ctf/lttng-live/lttng-live.hpp | 3 +- .../ctf/lttng-live/viewer-connection.cpp | 51 ++++++++----------- .../ctf/lttng-live/viewer-connection.hpp | 9 ++-- 4 files changed, 33 insertions(+), 43 deletions(-) diff --git a/src/plugins/ctf/lttng-live/lttng-live.cpp b/src/plugins/ctf/lttng-live/lttng-live.cpp index cdf324c2..f5601842 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.cpp +++ b/src/plugins/ctf/lttng-live/lttng-live.cpp @@ -162,9 +162,6 @@ static void lttng_live_msg_iter_destroy(struct lttng_live_msg_iter *lttng_live_m goto end; } - if (lttng_live_msg_iter->viewer_connection) { - delete lttng_live_msg_iter->viewer_connection; - } BT_ASSERT(lttng_live_msg_iter->lttng_live_comp); BT_ASSERT(lttng_live_msg_iter->lttng_live_comp->has_msg_iter); @@ -1624,7 +1621,7 @@ lttng_live_msg_iter_init(bt_self_message_iterator *self_msg_it, viewer_status = live_viewer_connection_create( lttng_live->params.url.c_str(), false, lttng_live_msg_iter, lttng_live_msg_iter->logger, - <tng_live_msg_iter->viewer_connection); + lttng_live_msg_iter->viewer_connection); if (viewer_status != LTTNG_LIVE_VIEWER_STATUS_OK) { if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) { BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger, @@ -1720,7 +1717,7 @@ lttng_live_query_list_sessions(const bt_value *params, const bt_value **result, bt_component_class_query_method_status status; const bt_value *url_value = NULL; const char *url; - struct live_viewer_connection *viewer_connection = NULL; + live_viewer_connection::UP viewer_connection; enum lttng_live_viewer_status viewer_status; enum bt_param_validation_status validation_status; gchar *validate_error = NULL; @@ -1738,7 +1735,7 @@ lttng_live_query_list_sessions(const bt_value *params, const bt_value **result, url_value = bt_value_map_borrow_entry_value_const(params, URL_PARAM); url = bt_value_string_get(url_value); - viewer_status = live_viewer_connection_create(url, true, NULL, logger, &viewer_connection); + viewer_status = live_viewer_connection_create(url, true, NULL, logger, viewer_connection); if (viewer_status != LTTNG_LIVE_VIEWER_STATUS_OK) { if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) { BT_CPPLOGE_APPEND_CAUSE_SPEC(logger, "Failed to create viewer connection"); @@ -1751,7 +1748,7 @@ lttng_live_query_list_sessions(const bt_value *params, const bt_value **result, goto error; } - status = live_viewer_connection_list_sessions(viewer_connection, result); + status = live_viewer_connection_list_sessions(viewer_connection.get(), result); if (status != BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_OK) { BT_CPPLOGE_APPEND_CAUSE_SPEC(logger, "Failed to list viewer sessions"); goto error; @@ -1767,8 +1764,6 @@ error: } end: - delete viewer_connection; - g_free(validate_error); return status; diff --git a/src/plugins/ctf/lttng-live/lttng-live.hpp b/src/plugins/ctf/lttng-live/lttng-live.hpp index 63011002..a4cc7cc5 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.hpp +++ b/src/plugins/ctf/lttng-live/lttng-live.hpp @@ -294,8 +294,7 @@ struct lttng_live_msg_iter /* Weak reference. */ bt_self_message_iterator *self_msg_iter = nullptr; - /* Owned by this. */ - struct live_viewer_connection *viewer_connection = nullptr; + live_viewer_connection::UP viewer_connection; std::vector sessions; diff --git a/src/plugins/ctf/lttng-live/viewer-connection.cpp b/src/plugins/ctf/lttng-live/viewer-connection.cpp index 42faae3b..66605b10 100644 --- a/src/plugins/ctf/lttng-live/viewer-connection.cpp +++ b/src/plugins/ctf/lttng-live/viewer-connection.cpp @@ -13,6 +13,7 @@ #include "common/common.h" #include "compat/endian.h" /* IWYU pragma: keep */ +#include "cpp-common/bt2s/make-unique.hpp" #include "data-stream.hpp" #include "lttng-live.hpp" @@ -753,7 +754,7 @@ lttng_live_query_session_ids(struct lttng_live_msg_iter *lttng_live_msg_iter) uint32_t i, sessions_count; uint64_t session_id; enum lttng_live_viewer_status status; - struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection; + live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection.get(); BT_CPPLOGD_SPEC(viewer_connection->logger, "Asking the relay daemon for the list of sessions: cmd={}", @@ -817,7 +818,7 @@ lttng_live_create_viewer_session(struct lttng_live_msg_iter *lttng_live_msg_iter struct lttng_viewer_cmd cmd; struct lttng_viewer_create_session_response resp; enum lttng_live_viewer_status status; - struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection; + live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection.get(); BT_CPPLOGD_SPEC(viewer_connection->logger, "Creating a viewer session: cmd={}", LTTNG_VIEWER_CREATE_SESSION); @@ -864,7 +865,7 @@ static enum lttng_live_viewer_status receive_streams(struct lttng_live_session * uint32_t i; struct lttng_live_msg_iter *lttng_live_msg_iter = session->lttng_live_msg_iter; enum lttng_live_viewer_status status; - struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection; + live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection.get(); BT_CPPLOGI_SPEC(viewer_connection->logger, "Getting {} new streams", stream_count); for (i = 0; i < stream_count; i++) { @@ -919,7 +920,7 @@ enum lttng_live_viewer_status lttng_live_session_attach(struct lttng_live_sessio struct lttng_viewer_attach_session_request rq; struct lttng_viewer_attach_session_response rp; struct lttng_live_msg_iter *lttng_live_msg_iter = session->lttng_live_msg_iter; - struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection; + live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection.get(); uint64_t session_id = session->id; uint32_t streams_count; const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq); @@ -1015,7 +1016,7 @@ enum lttng_live_viewer_status lttng_live_session_detach(struct lttng_live_sessio struct lttng_viewer_detach_session_request rq; struct lttng_viewer_detach_session_response rp; struct lttng_live_msg_iter *lttng_live_msg_iter = session->lttng_live_msg_iter; - struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection; + live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection.get(); uint64_t session_id = session->id; const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq); char cmd_buf[cmd_buf_len]; @@ -1097,7 +1098,7 @@ lttng_live_get_one_metadata_packet(struct lttng_live_trace *trace, std::vectorsession; struct lttng_live_msg_iter *lttng_live_msg_iter = session->lttng_live_msg_iter; struct lttng_live_metadata *metadata = trace->metadata.get(); - struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection; + live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection.get(); const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq); char cmd_buf[cmd_buf_len]; @@ -1234,7 +1235,7 @@ lttng_live_get_next_index(struct lttng_live_msg_iter *lttng_live_msg_iter, enum lttng_live_viewer_status viewer_status; struct lttng_viewer_index rp; enum lttng_live_iterator_status status; - struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection; + live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection.get(); struct lttng_live_trace *trace = stream->trace; const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq); char cmd_buf[cmd_buf_len]; @@ -1373,7 +1374,7 @@ lttng_live_get_stream_bytes(struct lttng_live_msg_iter *lttng_live_msg_iter, struct lttng_viewer_trace_packet rp; struct lttng_viewer_cmd cmd; struct lttng_viewer_get_packet rq; - struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection; + live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection.get(); struct lttng_live_trace *trace = stream->trace; const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq); char cmd_buf[cmd_buf_len]; @@ -1500,7 +1501,7 @@ lttng_live_session_get_new_streams(struct lttng_live_session *session, struct lttng_viewer_new_streams_response rp; struct lttng_live_msg_iter *lttng_live_msg_iter = session->lttng_live_msg_iter; enum lttng_live_viewer_status viewer_status; - struct live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection; + live_viewer_connection *viewer_connection = lttng_live_msg_iter->viewer_connection.get(); uint32_t streams_count; const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq); char cmd_buf[cmd_buf_len]; @@ -1582,18 +1583,16 @@ end: return status; } -enum lttng_live_viewer_status live_viewer_connection_create( - const char *url, bool in_query, struct lttng_live_msg_iter *lttng_live_msg_iter, - const bt2c::Logger& parentLogger, struct live_viewer_connection **viewer) +enum lttng_live_viewer_status +live_viewer_connection_create(const char *url, bool in_query, + struct lttng_live_msg_iter *lttng_live_msg_iter, + const bt2c::Logger& parentLogger, live_viewer_connection::UP& viewer) { - enum lttng_live_viewer_status status; - - live_viewer_connection *viewer_connection = new live_viewer_connection {parentLogger}; + auto viewer_connection = bt2s::make_unique(parentLogger); if (bt_socket_init(viewer_connection->logger) != 0) { BT_CPPLOGE_APPEND_CAUSE_SPEC(viewer_connection->logger, "Failed to init socket"); - status = LTTNG_LIVE_VIEWER_STATUS_ERROR; - goto error; + return LTTNG_LIVE_VIEWER_STATUS_ERROR; } viewer_connection->control_sock = BT_INVALID_SOCKET; @@ -1603,7 +1602,8 @@ enum lttng_live_viewer_status live_viewer_connection_create( viewer_connection->url = url; BT_CPPLOGD_SPEC(viewer_connection->logger, "Establishing connection to url \"{}\"...", url); - status = lttng_live_connect_viewer(viewer_connection); + const auto status = lttng_live_connect_viewer(viewer_connection.get()); + /* * Only print error and append cause in case of error. not in case of * interruption. @@ -1613,21 +1613,14 @@ enum lttng_live_viewer_status live_viewer_connection_create( "Failed to establish connection: " "url=\"{}\"", url); - goto error; + return status; } else if (status == LTTNG_LIVE_VIEWER_STATUS_INTERRUPTED) { - goto error; + return status; } BT_CPPLOGD_SPEC(viewer_connection->logger, "Connection to url \"{}\" is established", url); - *viewer = viewer_connection; - status = LTTNG_LIVE_VIEWER_STATUS_OK; - goto end; - -error: - delete viewer_connection; - -end: - return status; + viewer = std::move(viewer_connection); + return LTTNG_LIVE_VIEWER_STATUS_OK; } live_viewer_connection::~live_viewer_connection() diff --git a/src/plugins/ctf/lttng-live/viewer-connection.hpp b/src/plugins/ctf/lttng-live/viewer-connection.hpp index e35aea88..9f564a39 100644 --- a/src/plugins/ctf/lttng-live/viewer-connection.hpp +++ b/src/plugins/ctf/lttng-live/viewer-connection.hpp @@ -50,6 +50,8 @@ enum lttng_live_get_one_metadata_status struct live_viewer_connection { + using UP = std::unique_ptr; + explicit live_viewer_connection(const bt2c::Logger& parentLogger) : logger {parentLogger, "PLUGIN/SRC.CTF.LTTNG-LIVE/VIEWER"} { @@ -97,9 +99,10 @@ struct packet_index uint64_t packet_seq_num; /* packet sequence number */ }; -enum lttng_live_viewer_status live_viewer_connection_create( - const char *url, bool in_query, struct lttng_live_msg_iter *lttng_live_msg_iter, - const bt2c::Logger& parentLogger, struct live_viewer_connection **viewer); +enum lttng_live_viewer_status +live_viewer_connection_create(const char *url, bool in_query, + struct lttng_live_msg_iter *lttng_live_msg_iter, + const bt2c::Logger& parentLogger, live_viewer_connection::UP& viewer); enum lttng_live_viewer_status lttng_live_create_viewer_session(struct lttng_live_msg_iter *lttng_live_msg_iter); -- 2.34.1