Merge duplicate code in consumer for add relayd
[lttng-tools.git] / src / common / kernel-consumer / kernel-consumer.c
index f5eb35c31e513e458a69c8d607c26764b916d577..86ccddfd09e80672fbca3fb1ab6f772fb41bcc81 100644 (file)
@@ -25,6 +25,7 @@
 #include <sys/mman.h>
 #include <sys/socket.h>
 #include <sys/types.h>
+#include <inttypes.h>
 #include <unistd.h>
 #include <sys/stat.h>
 
@@ -104,82 +105,9 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
        switch (msg.cmd_type) {
        case LTTNG_CONSUMER_ADD_RELAYD_SOCKET:
        {
-               int fd;
-               struct consumer_relayd_sock_pair *relayd;
-
-               DBG("Consumer adding relayd socket");
-
-               /* Get relayd reference if exists. */
-               relayd = consumer_find_relayd(msg.u.relayd_sock.net_index);
-               if (relayd == NULL) {
-                       /* Not found. Allocate one. */
-                       relayd = consumer_allocate_relayd_sock_pair(
-                                       msg.u.relayd_sock.net_index);
-                       if (relayd == NULL) {
-                               lttng_consumer_send_error(ctx, CONSUMERD_OUTFD_ERROR);
-                               goto end_nosignal;
-                       }
-               }
-
-               /* Poll on consumer socket. */
-               if (lttng_consumer_poll_socket(consumer_sockpoll) < 0) {
-                       rcu_read_unlock();
-                       return -EINTR;
-               }
-
-               /* Get relayd socket from session daemon */
-               ret = lttcomm_recv_fds_unix_sock(sock, &fd, 1);
-               if (ret != sizeof(fd)) {
-                       lttng_consumer_send_error(ctx, CONSUMERD_ERROR_RECV_FD);
-                       goto end_nosignal;
-               }
-
-               /* Copy socket information and received FD */
-               switch (msg.u.relayd_sock.type) {
-               case LTTNG_STREAM_CONTROL:
-                       /* Copy received lttcomm socket */
-                       lttcomm_copy_sock(&relayd->control_sock, &msg.u.relayd_sock.sock);
-
-                       ret = lttcomm_create_sock(&relayd->control_sock);
-                       if (ret < 0) {
-                               goto end_nosignal;
-                       }
-
-                       /* Close the created socket fd which is useless */
-                       close(relayd->control_sock.fd);
-
-                       /* Assign new file descriptor */
-                       relayd->control_sock.fd = fd;
-                       break;
-               case LTTNG_STREAM_DATA:
-                       /* Copy received lttcomm socket */
-                       lttcomm_copy_sock(&relayd->data_sock, &msg.u.relayd_sock.sock);
-                       ret = lttcomm_create_sock(&relayd->data_sock);
-                       if (ret < 0) {
-                               goto end_nosignal;
-                       }
-
-                       /* Close the created socket fd which is useless */
-                       close(relayd->data_sock.fd);
-
-                       /* Assign new file descriptor */
-                       relayd->data_sock.fd = fd;
-                       break;
-               default:
-                       ERR("Unknown relayd socket type");
-                       goto end_nosignal;
-               }
-
-               DBG("Consumer %s socket created successfully with net idx %d (fd: %d)",
-                               msg.u.relayd_sock.type == LTTNG_STREAM_CONTROL ? "control" : "data",
-                               relayd->net_seq_idx, fd);
-
-               /*
-                * Add relayd socket pair to consumer data hashtable. If object already
-                * exists or on error, the function gracefully returns.
-                */
-               consumer_add_relayd(relayd);
-
+               ret = consumer_add_relayd_socket(msg.u.relayd_sock.net_index,
+                               msg.u.relayd_sock.type, ctx, sock, consumer_sockpoll,
+                               &msg.u.relayd_sock.sock);
                goto end_nosignal;
        }
        case LTTNG_CONSUMER_ADD_CHANNEL:
@@ -285,13 +213,14 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
        {
                struct consumer_relayd_sock_pair *relayd;
 
-               DBG("Kernel consumer destroying relayd %zu",
+               DBG("Kernel consumer destroying relayd %" PRIu64,
                                msg.u.destroy_relayd.net_seq_idx);
 
                /* Get relayd reference if exists. */
                relayd = consumer_find_relayd(msg.u.destroy_relayd.net_seq_idx);
                if (relayd == NULL) {
-                       ERR("Unable to find relayd %zu", msg.u.destroy_relayd.net_seq_idx);
+                       ERR("Unable to find relayd %" PRIu64,
+                                       msg.u.destroy_relayd.net_seq_idx);
                        goto end_nosignal;
                }
 
@@ -370,7 +299,7 @@ ssize_t lttng_kconsumer_read_subbuffer(struct lttng_consumer_stream *stream,
                                 * display the error but continue processing to try
                                 * to release the subbuffer
                                 */
-                               ERR("Error splicing to tracefile (ret: %ld != len: %ld)",
+                               ERR("Error splicing to tracefile (ret: %zd != len: %lu)",
                                                ret, len);
                        }
 
This page took 0.026728 seconds and 5 git commands to generate.