src.ctf.lttng-live: use viewer_connection_close_socket more
[babeltrace.git] / src / plugins / ctf / lttng-live / viewer-connection.cpp
index ac63a9c5922cdb95c01e58c97409d97354215e07..f829d07dcc65b5496aa1a4780f31fdd260cfc2a5 100644 (file)
@@ -79,6 +79,10 @@ viewer_status_to_ctf_msg_iter_medium_status(enum lttng_live_viewer_status viewer
 
 static inline void viewer_connection_close_socket(struct live_viewer_connection *viewer_connection)
 {
+    if (viewer_connection->control_sock == BT_INVALID_SOCKET) {
+        return;
+    }
+
     int ret = bt_socket_close(viewer_connection->control_sock);
     if (ret == -1) {
         BT_CPPLOGW_ERRNO_SPEC(viewer_connection->logger,
@@ -404,29 +408,12 @@ lttng_live_connect_viewer(struct live_viewer_connection *viewer_connection)
     goto end;
 
 error:
-    if (viewer_connection->control_sock != BT_INVALID_SOCKET) {
-        if (bt_socket_close(viewer_connection->control_sock) == BT_SOCKET_ERROR) {
-            BT_CPPLOGW_SPEC(viewer_connection->logger, "Error closing socket: {}.",
-                            bt_socket_errormsg());
-        }
-    }
-    viewer_connection->control_sock = BT_INVALID_SOCKET;
+    viewer_connection_close_socket(viewer_connection);
+
 end:
     return status;
 }
 
-static void lttng_live_disconnect_viewer(struct live_viewer_connection *viewer_connection)
-{
-    if (viewer_connection->control_sock == BT_INVALID_SOCKET) {
-        return;
-    }
-    if (bt_socket_close(viewer_connection->control_sock) == BT_SOCKET_ERROR) {
-        BT_CPPLOGW_SPEC(viewer_connection->logger, "Error closing socket: {}",
-                        bt_socket_errormsg());
-        viewer_connection->control_sock = BT_INVALID_SOCKET;
-    }
-}
-
 static int list_update_session(const bt2::ArrayValue results,
                                const struct lttng_viewer_session *session, bool *_found,
                                struct live_viewer_connection *viewer_connection)
@@ -611,9 +598,8 @@ static int list_append_session(const bt2::ArrayValue results, const std::string&
  *   }
  */
 
-bt_component_class_query_method_status
-live_viewer_connection_list_sessions(struct live_viewer_connection *viewer_connection,
-                                     bt2::Value::Shared& user_result)
+bt2::Value::Shared
+live_viewer_connection_list_sessions(struct live_viewer_connection *viewer_connection)
 {
     enum lttng_live_viewer_status viewer_status;
     struct lttng_viewer_cmd cmd;
@@ -630,19 +616,18 @@ live_viewer_connection_list_sessions(struct live_viewer_connection *viewer_conne
 
     viewer_status = lttng_live_send(viewer_connection, &cmd, sizeof(cmd));
     if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) {
-        BT_CPPLOGE_APPEND_CAUSE_SPEC(viewer_connection->logger,
-                                     "Error sending list sessions command");
-        return BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_ERROR;
+        BT_CPPLOGE_APPEND_CAUSE_AND_THROW_SPEC(viewer_connection->logger, bt2::Error,
+                                               "Error sending list sessions command");
     } else if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_INTERRUPTED) {
-        return BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_AGAIN;
+        throw bt2c::TryAgain {};
     }
 
     viewer_status = lttng_live_recv(viewer_connection, &list, sizeof(list));
     if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) {
-        BT_CPPLOGE_APPEND_CAUSE_SPEC(viewer_connection->logger, "Error receiving session list");
-        return BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_ERROR;
+        BT_CPPLOGE_APPEND_CAUSE_AND_THROW_SPEC(viewer_connection->logger, bt2::Error,
+                                               "Error receiving session list");
     } else if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_INTERRUPTED) {
-        return BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_AGAIN;
+        throw bt2c::TryAgain {};
     }
 
     sessions_count = be32toh(list.sessions_count);
@@ -651,22 +636,21 @@ live_viewer_connection_list_sessions(struct live_viewer_connection *viewer_conne
 
         viewer_status = lttng_live_recv(viewer_connection, &lsession, sizeof(lsession));
         if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) {
-            BT_CPPLOGE_APPEND_CAUSE_SPEC(viewer_connection->logger, "Error receiving session:");
-            return BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_ERROR;
+            BT_CPPLOGE_APPEND_CAUSE_AND_THROW_SPEC(viewer_connection->logger, bt2::Error,
+                                                   "Error receiving session:");
         } else if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_INTERRUPTED) {
-            return BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_AGAIN;
+            throw bt2c::TryAgain {};
         }
 
         lsession.hostname[LTTNG_VIEWER_HOST_NAME_MAX - 1] = '\0';
         lsession.session_name[LTTNG_VIEWER_NAME_MAX - 1] = '\0';
         if (list_append_session(*result, viewer_connection->url, &lsession, viewer_connection)) {
-            BT_CPPLOGE_APPEND_CAUSE_SPEC(viewer_connection->logger, "Error appending session");
-            return BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_ERROR;
+            BT_CPPLOGE_APPEND_CAUSE_AND_THROW_SPEC(viewer_connection->logger, bt2::Error,
+                                                   "Error appending session");
         }
     }
 
-    user_result = std::move(result);
-    return BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_OK;
+    return result;
 }
 
 static enum lttng_live_viewer_status
@@ -1551,7 +1535,7 @@ live_viewer_connection::~live_viewer_connection()
 {
     BT_CPPLOGD_SPEC(this->logger, "Closing connection to relay: relay-url=\"{}\"", this->url);
 
-    lttng_live_disconnect_viewer(this);
+    viewer_connection_close_socket(this);
 
     bt_socket_fini();
 }
This page took 0.024125 seconds and 4 git commands to generate.