src.ctf.lttng-live: introduce live_viewer_connection::UP and use it
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 26 Jul 2022 21:46:14 +0000 (17:46 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 23 Aug 2022 16:06:16 +0000 (12:06 -0400)
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 <simon.marchi@efficios.com>
Change-Id: I0f91d4636c67ad9f820783932fa3c45464dfb3bb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/8472
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
src/plugins/ctf/lttng-live/lttng-live.cpp
src/plugins/ctf/lttng-live/lttng-live.hpp
src/plugins/ctf/lttng-live/viewer-connection.cpp
src/plugins/ctf/lttng-live/viewer-connection.hpp

index 3ddc97502d4801841eb4b608212d99d8bff5f034..180932fa19f4e97e7b53d9e2f901d438f7d6ff1d 100644 (file)
@@ -222,9 +222,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);
 
@@ -1686,7 +1683,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, logCfg,
-                                                      &lttng_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_CLOGE_APPEND_CAUSE("Failed to create viewer connection");
@@ -1776,7 +1773,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;
@@ -1794,7 +1791,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, logCfg, &viewer_connection);
+    viewer_status = live_viewer_connection_create(url, true, NULL, logCfg, viewer_connection);
     if (viewer_status != LTTNG_LIVE_VIEWER_STATUS_OK) {
         if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) {
             BT_CLOGE_APPEND_CAUSE("Failed to create viewer connection");
@@ -1807,7 +1804,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_CLOGE_APPEND_CAUSE("Failed to list viewer sessions");
         goto error;
@@ -1823,8 +1820,6 @@ error:
     }
 
 end:
-    delete viewer_connection;
-
     g_free(validate_error);
 
     return status;
index 45c686d72583a483f0940b7177fabe730eac198e..cab7dadd11e577b154137fc179d651ef5bfdbab5 100644 (file)
@@ -281,8 +281,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<lttng_live_session::UP> sessions;
 
index d35f09e1c95b271e12eac908d487c2cea4bb08e6..fd149118a42411630325ee9c6bc61c4ceab4b910 100644 (file)
@@ -23,6 +23,7 @@
 #include "compat/compiler.h"
 #include "common/common.h"
 #include <babeltrace2/babeltrace.h>
+#include "cpp-common/make-unique.hpp"
 
 #include "lttng-live.hpp"
 #include "viewer-connection.hpp"
@@ -842,7 +843,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();
     const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg;
 
     BT_CLOGD("Asking the relay daemon for the list of sessions: cmd=%s",
@@ -905,7 +906,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();
     const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg;
 
     BT_CLOGD("Creating a viewer session: cmd=%s",
@@ -952,7 +953,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();
     const bt2_common::LogCfg& logCfg = session->logCfg;
 
     BT_CLOGI("Getting %" PRIu32 " new streams", stream_count);
@@ -1009,7 +1010,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();
     const bt2_common::LogCfg& logCfg = session->logCfg;
     uint64_t session_id = session->id;
     uint32_t streams_count;
@@ -1104,7 +1105,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];
@@ -1187,7 +1188,7 @@ lttng_live_get_one_metadata_packet(struct lttng_live_trace *trace, std::vector<c
     struct lttng_live_session *session = trace->session;
     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 bt2_common::LogCfg& logCfg = trace->logCfg;
     const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq);
     char cmd_buf[cmd_buf_len];
@@ -1324,7 +1325,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];
@@ -1459,7 +1460,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();
     const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg;
     struct lttng_live_trace *trace = stream->trace;
     const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq);
@@ -1581,7 +1582,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();
     const bt2_common::LogCfg& logCfg = lttng_live_msg_iter->logCfg;
     uint32_t streams_count;
     const size_t cmd_buf_len = sizeof(cmd) + sizeof(rq);
@@ -1664,18 +1665,19 @@ end:
 }
 
 BT_HIDDEN
-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 bt2_common::LogCfg& logCfg, 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 bt2_common::LogCfg& logCfg, live_viewer_connection::UP& viewer)
 {
     enum lttng_live_viewer_status status;
 
-    live_viewer_connection *viewer_connection = new live_viewer_connection {logCfg};
+    live_viewer_connection::UP viewer_connection =
+        bt2_common::makeUnique<live_viewer_connection>(logCfg);
 
     if (bt_socket_init(logCfg.logLevel()) != 0) {
         BT_CLOGE_APPEND_CAUSE("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;
@@ -1685,7 +1687,7 @@ enum lttng_live_viewer_status live_viewer_connection_create(
     viewer_connection->url = url;
 
     BT_CLOGD("Establishing connection to url \"%s\"...", url);
-    status = lttng_live_connect_viewer(viewer_connection);
+    status = lttng_live_connect_viewer(viewer_connection.get());
     /*
      * Only print error and append cause in case of error. not in case of
      * interruption.
@@ -1694,20 +1696,15 @@ enum lttng_live_viewer_status live_viewer_connection_create(
         BT_CLOGE_APPEND_CAUSE("Failed to establish connection: "
                               "url=\"%s\"",
                               url);
-        goto error;
+        return status;
     } else if (status == LTTNG_LIVE_VIEWER_STATUS_INTERRUPTED) {
-        goto error;
+        return status;
     }
     BT_CLOGD("Connection to url \"%s\" is established", url);
 
-    *viewer = viewer_connection;
+    viewer = std::move(viewer_connection);
     status = LTTNG_LIVE_VIEWER_STATUS_OK;
-    goto end;
-
-error:
-    delete viewer_connection;
 
-end:
     return status;
 }
 
index 87c1ab1cdcfac218893b841244b3666a463cf7d0..12f9c9f9e7a0c7028487c308fc82eca3818ed666 100644 (file)
@@ -55,6 +55,8 @@ struct lttng_live_component;
 
 struct live_viewer_connection
 {
+    using UP = std::unique_ptr<live_viewer_connection>;
+
     explicit live_viewer_connection(const bt2_common::LogCfg& logCfgParam) noexcept :
         logCfg {logCfgParam}
     {
@@ -102,9 +104,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 bt2_common::LogCfg& logCfg, 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 bt2_common::LogCfg& logCfg, live_viewer_connection::UP& viewer);
 
 enum lttng_live_viewer_status
 lttng_live_create_viewer_session(struct lttng_live_msg_iter *lttng_live_msg_iter);
This page took 0.028887 seconds and 5 git commands to generate.