Remove useless arg from kernel consumer send stream
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index 5cfd57971f7423fe21f69c1d58b2cfafca99a05b..6ea615e10bd67435866598632c592d4f3562dc68 100644 (file)
@@ -50,6 +50,7 @@
 #include "context.h"
 #include "event.h"
 #include "kernel.h"
+#include "kernel-consumer.h"
 #include "modprobe.h"
 #include "shm.h"
 #include "ust-ctl.h"
 
 #define CONSUMERD_FILE "lttng-consumerd"
 
-struct consumer_data {
-       enum lttng_consumer_type type;
-
-       pthread_t thread;       /* Worker thread interacting with the consumer */
-       sem_t sem;
-
-       /* Mutex to control consumerd pid assignation */
-       pthread_mutex_t pid_mutex;
-       pid_t pid;
-
-       int err_sock;
-       int cmd_sock;
-
-       /* consumer error and command Unix socket path */
-       char err_unix_sock_path[PATH_MAX];
-       char cmd_unix_sock_path[PATH_MAX];
-};
-
 /* Const values */
 const char default_home_dir[] = DEFAULT_HOME_DIR;
 const char default_tracing_group[] = DEFAULT_TRACING_GROUP;
@@ -424,7 +407,7 @@ static void stop_threads(void)
  */
 static void cleanup(void)
 {
-       int ret, i;
+       int ret;
        char *cmd;
        struct ltt_session *sess, *stmp;
 
@@ -474,34 +457,9 @@ static void cleanup(void)
                DBG("Unloading kernel modules");
                modprobe_remove_lttng_all();
        }
-
-       /*
-        * Closing all pipes used for communication between threads.
-        */
-       for (i = 0; i < 2; i++) {
-               if (kernel_poll_pipe[i] >= 0) {
-                       ret = close(kernel_poll_pipe[i]);
-                       if (ret) {
-                               PERROR("close");
-                       }
-               }
-       }
-       for (i = 0; i < 2; i++) {
-               if (thread_quit_pipe[i] >= 0) {
-                       ret = close(thread_quit_pipe[i]);
-                       if (ret) {
-                               PERROR("close");
-                       }
-               }
-       }
-       for (i = 0; i < 2; i++) {
-               if (apps_cmd_pipe[i] >= 0) {
-                       ret = close(apps_cmd_pipe[i]);
-                       if (ret) {
-                               PERROR("close");
-                       }
-               }
-       }
+       utils_close_pipe(kernel_poll_pipe);
+       utils_close_pipe(thread_quit_pipe);
+       utils_close_pipe(apps_cmd_pipe);
 
        /* <fun> */
        DBG("%c[%d;%dm*** assert failed :-) *** ==> %c[%dm%c[%d;%dm"
@@ -543,139 +501,6 @@ static void clean_command_ctx(struct command_ctx **cmd_ctx)
        }
 }
 
-/*
- * Send all stream fds of kernel channel to the consumer.
- */
-static int send_kconsumer_channel_streams(struct consumer_data *consumer_data,
-               int sock, struct ltt_kernel_channel *channel,
-               uid_t uid, gid_t gid)
-{
-       int ret;
-       struct ltt_kernel_stream *stream;
-       struct lttcomm_consumer_msg lkm;
-
-       DBG("Sending streams of channel %s to kernel consumer",
-                       channel->channel->name);
-
-       /* Send channel */
-       lkm.cmd_type = LTTNG_CONSUMER_ADD_CHANNEL;
-       lkm.u.channel.channel_key = channel->fd;
-       lkm.u.channel.max_sb_size = channel->channel->attr.subbuf_size;
-       lkm.u.channel.mmap_len = 0;     /* for kernel */
-       DBG("Sending channel %d to consumer", lkm.u.channel.channel_key);
-       ret = lttcomm_send_unix_sock(sock, &lkm, sizeof(lkm));
-       if (ret < 0) {
-               PERROR("send consumer channel");
-               goto error;
-       }
-
-       /* Send streams */
-       cds_list_for_each_entry(stream, &channel->stream_list.head, list) {
-               if (!stream->fd) {
-                       continue;
-               }
-               lkm.cmd_type = LTTNG_CONSUMER_ADD_STREAM;
-               lkm.u.stream.channel_key = channel->fd;
-               lkm.u.stream.stream_key = stream->fd;
-               lkm.u.stream.state = stream->state;
-               lkm.u.stream.output = channel->channel->attr.output;
-               lkm.u.stream.mmap_len = 0;      /* for kernel */
-               lkm.u.stream.uid = uid;
-               lkm.u.stream.gid = gid;
-               strncpy(lkm.u.stream.path_name, stream->pathname, PATH_MAX - 1);
-               lkm.u.stream.path_name[PATH_MAX - 1] = '\0';
-               DBG("Sending stream %d to consumer", lkm.u.stream.stream_key);
-               ret = lttcomm_send_unix_sock(sock, &lkm, sizeof(lkm));
-               if (ret < 0) {
-                       PERROR("send consumer stream");
-                       goto error;
-               }
-               ret = lttcomm_send_fds_unix_sock(sock, &stream->fd, 1);
-               if (ret < 0) {
-                       PERROR("send consumer stream ancillary data");
-                       goto error;
-               }
-       }
-
-       DBG("consumer channel streams sent");
-
-       return 0;
-
-error:
-       return ret;
-}
-
-/*
- * Send all stream fds of the kernel session to the consumer.
- */
-static int send_kconsumer_session_streams(struct consumer_data *consumer_data,
-               struct ltt_kernel_session *session)
-{
-       int ret;
-       struct ltt_kernel_channel *chan;
-       struct lttcomm_consumer_msg lkm;
-       int sock = session->consumer_fd;
-
-       DBG("Sending metadata stream fd");
-
-       /* Extra protection. It's NOT supposed to be set to -1 at this point */
-       if (session->consumer_fd < 0) {
-               session->consumer_fd = consumer_data->cmd_sock;
-       }
-
-       if (session->metadata_stream_fd >= 0) {
-               /* Send metadata channel fd */
-               lkm.cmd_type = LTTNG_CONSUMER_ADD_CHANNEL;
-               lkm.u.channel.channel_key = session->metadata->fd;
-               lkm.u.channel.max_sb_size = session->metadata->conf->attr.subbuf_size;
-               lkm.u.channel.mmap_len = 0;     /* for kernel */
-               DBG("Sending metadata channel %d to consumer", lkm.u.channel.channel_key);
-               ret = lttcomm_send_unix_sock(sock, &lkm, sizeof(lkm));
-               if (ret < 0) {
-                       PERROR("send consumer channel");
-                       goto error;
-               }
-
-               /* Send metadata stream fd */
-               lkm.cmd_type = LTTNG_CONSUMER_ADD_STREAM;
-               lkm.u.stream.channel_key = session->metadata->fd;
-               lkm.u.stream.stream_key = session->metadata_stream_fd;
-               lkm.u.stream.state = LTTNG_CONSUMER_ACTIVE_STREAM;
-               lkm.u.stream.output = DEFAULT_KERNEL_CHANNEL_OUTPUT;
-               lkm.u.stream.mmap_len = 0;      /* for kernel */
-               lkm.u.stream.uid = session->uid;
-               lkm.u.stream.gid = session->gid;
-               strncpy(lkm.u.stream.path_name, session->metadata->pathname, PATH_MAX - 1);
-               lkm.u.stream.path_name[PATH_MAX - 1] = '\0';
-               DBG("Sending metadata stream %d to consumer", lkm.u.stream.stream_key);
-               ret = lttcomm_send_unix_sock(sock, &lkm, sizeof(lkm));
-               if (ret < 0) {
-                       PERROR("send consumer stream");
-                       goto error;
-               }
-               ret = lttcomm_send_fds_unix_sock(sock, &session->metadata_stream_fd, 1);
-               if (ret < 0) {
-                       PERROR("send consumer stream");
-                       goto error;
-               }
-       }
-
-       cds_list_for_each_entry(chan, &session->channel_list.head, list) {
-               ret = send_kconsumer_channel_streams(consumer_data, sock, chan,
-                               session->uid, session->gid);
-               if (ret < 0) {
-                       goto error;
-               }
-       }
-
-       DBG("consumer fds (metadata and channel streams) sent");
-
-       return 0;
-
-error:
-       return ret;
-}
-
 /*
  * Notify UST applications using the shm mmap futex.
  */
@@ -817,9 +642,8 @@ static int update_kernel_stream(struct consumer_data *consumer_data, int fd)
                                 * stream fds.
                                 */
                                if (session->kernel_session->consumer_fds_sent == 1) {
-                                       ret = send_kconsumer_channel_streams(consumer_data,
-                                                       session->kernel_session->consumer_fd, channel,
-                                                       session->uid, session->gid);
+                                       ret = kernel_consumer_send_channel_stream(consumer_data,
+                                                       channel, session->uid, session->gid);
                                        if (ret < 0) {
                                                goto error;
                                        }
@@ -1931,7 +1755,7 @@ static int init_kernel_tracing(struct ltt_kernel_session *session)
                        session->consumer_fd = kconsumer_data.cmd_sock;
                }
 
-               ret = send_kconsumer_session_streams(&kconsumer_data, session);
+               ret = kernel_consumer_send_session(&kconsumer_data, session);
                if (ret < 0) {
                        ret = LTTCOMM_KERN_CONSUMER_FAIL;
                        goto error;
@@ -4317,58 +4141,6 @@ end:
        return ret;
 }
 
-/*
- * Create the pipe used to wake up the kernel thread.
- * Closed in cleanup().
- */
-static int create_kernel_poll_pipe(void)
-{
-       int ret, i;
-
-       ret = pipe(kernel_poll_pipe);
-       if (ret < 0) {
-               PERROR("kernel poll pipe");
-               goto error;
-       }
-
-       for (i = 0; i < 2; i++) {
-               ret = fcntl(kernel_poll_pipe[i], F_SETFD, FD_CLOEXEC);
-               if (ret < 0) {
-                       PERROR("fcntl kernel_poll_pipe");
-                       goto error;
-               }
-       }
-
-error:
-       return ret;
-}
-
-/*
- * Create the application command pipe to wake thread_manage_apps.
- * Closed in cleanup().
- */
-static int create_apps_cmd_pipe(void)
-{
-       int ret, i;
-
-       ret = pipe(apps_cmd_pipe);
-       if (ret < 0) {
-               PERROR("apps cmd pipe");
-               goto error;
-       }
-
-       for (i = 0; i < 2; i++) {
-               ret = fcntl(apps_cmd_pipe[i], F_SETFD, FD_CLOEXEC);
-               if (ret < 0) {
-                       PERROR("fcntl apps_cmd_pipe");
-                       goto error;
-               }
-       }
-
-error:
-       return ret;
-}
-
 /*
  * Create the lttng run directory needed for all global sockets and pipe.
  */
@@ -4767,12 +4539,12 @@ int main(int argc, char **argv)
        }
 
        /* Setup the kernel pipe for waking up the kernel thread */
-       if ((ret = create_kernel_poll_pipe()) < 0) {
+       if ((ret = utils_create_pipe_cloexec(kernel_poll_pipe)) < 0) {
                goto exit;
        }
 
        /* Setup the thread apps communication pipe. */
-       if ((ret = create_apps_cmd_pipe()) < 0) {
+       if ((ret = utils_create_pipe_cloexec(apps_cmd_pipe)) < 0) {
                goto exit;
        }
 
This page took 0.026008 seconds and 4 git commands to generate.