Fix message argument type
[lttng-tools.git] / ltt-sessiond / main.c
index 93e6ca6689e0fd09304509c5de34f29d0475289e..98738928464290a8b1406bf21be06e54c26c9b68 100644 (file)
@@ -35,7 +35,6 @@
 #include <unistd.h>
 
 #include <urcu/list.h>         /* URCU list library (-lurcu) */
-#include <ust/ustctl.h>                /* UST control lib (-lust) */
 #include <lttng/lttng.h>
 
 #include "liblttsessiondcomm.h"
@@ -46,6 +45,7 @@
 #include "session.h"
 #include "traceable-app.h"
 #include "lttng-kconsumerd.h"
+#include "libustctl.h"
 
 /*
  * TODO:
@@ -224,7 +224,7 @@ static int ust_connect_app(pid_t pid)
 
        sock = ustctl_connect_pid(lta->pid);
        if (sock < 0) {
-               ERR("Fail connecting to the PID %d\n", pid);
+               ERR("Fail connecting to the PID %d", pid);
        }
 
        return sock;
@@ -493,7 +493,7 @@ static pid_t spawn_kconsumerd(void)
                /*
                 * Exec kconsumerd.
                 */
-               execlp("kconsumerd", "kconsumerd", "--quiet", NULL);
+               execlp("kconsumerd", "kconsumerd", "--verbose", NULL);
                if (errno != 0) {
                        perror("kernel start consumer exec");
                }
@@ -634,11 +634,14 @@ static int create_trace_dir(struct ltt_kernel_session *session)
        /* Create all channel directories */
        cds_list_for_each_entry(chan, &session->channel_list.head, list) {
                DBG("Creating trace directory at %s", chan->pathname);
+               // TODO: recursive create dir
                ret = mkdir(chan->pathname, S_IRWXU | S_IRWXG );
                if (ret < 0) {
-                       perror("mkdir trace path");
-                       ret = -errno;
-                       goto error;
+                       if (ret != EEXIST) {
+                               perror("mkdir trace path");
+                               ret = -errno;
+                               goto error;
+                       }
                }
        }
 
@@ -648,6 +651,23 @@ error:
        return ret;
 }
 
+/*
+ *  init_kernel_tracer
+ *
+ *  Setup necessary data for kernel tracer action.
+ */
+static void init_kernel_tracer(void)
+{
+       /* Set the global kernel tracer fd */
+       kernel_tracer_fd = open(DEFAULT_KERNEL_TRACER_PATH, O_RDWR);
+       if (kernel_tracer_fd < 0) {
+               WARN("No kernel tracer available");
+               kernel_tracer_fd = 0;
+       }
+
+       DBG("Kernel tracer fd %d", kernel_tracer_fd);
+}
+
 /*
  *     process_client_msg
  *
@@ -690,11 +710,13 @@ static int process_client_msg(struct command_ctx *cmd_ctx)
        case KERNEL_OPEN_METADATA:
        case KERNEL_START_TRACE:
        case KERNEL_STOP_TRACE:
-               /* TODO: reconnect to kernel tracer to check if
-                * it's loadded */
+               /* Kernel tracer check */
                if (kernel_tracer_fd == 0) {
-                       ret = LTTCOMM_KERN_NA;
-                       goto error;
+                       init_kernel_tracer();
+                       if (kernel_tracer_fd == 0) {
+                               ret = LTTCOMM_KERN_NA;
+                               goto error;
+                       }
                }
                break;
        }
@@ -1178,6 +1200,8 @@ static void *thread_manage_clients(void *data)
                        continue;
                }
 
+               // TODO: Validate cmd_ctx including sanity check for security purpose.
+
                /*
                 * This function dispatch the work to the kernel or userspace tracer
                 * libs and fill the lttcomm_lttng_msg data structure of all the needed
@@ -1201,6 +1225,9 @@ static void *thread_manage_clients(void *data)
                }
 
                clean_command_ctx(cmd_ctx);
+
+               /* End of transmission */
+               close(sock);
        }
 
 error:
@@ -1469,23 +1496,6 @@ error:
        return ret;
 }
 
-/*
- *  init_kernel_tracer
- *
- *  Setup necessary data for kernel tracer action.
- */
-static void init_kernel_tracer(void)
-{
-       /* Set the global kernel tracer fd */
-       kernel_tracer_fd = open(DEFAULT_KERNEL_TRACER_PATH, O_RDWR);
-       if (kernel_tracer_fd < 0) {
-               WARN("No kernel tracer available");
-               kernel_tracer_fd = 0;
-       }
-
-       DBG("Kernel tracer fd %d", kernel_tracer_fd);
-}
-
 /*
  *  set_kconsumerd_sockets
  *
@@ -1506,8 +1516,11 @@ static int set_kconsumerd_sockets(void)
 
        ret = mkdir(KCONSUMERD_PATH, S_IRWXU | S_IRWXG);
        if (ret < 0) {
-               ERR("Failed to create " KCONSUMERD_PATH);
-               goto error;
+               if (errno != EEXIST) {
+                       ERR("Failed to create " KCONSUMERD_PATH);
+                       goto error;
+               }
+               ret = 0;
        }
 
        /* Create the kconsumerd error unix socket */
This page took 0.024785 seconds and 4 git commands to generate.