Truncate exclusion names to have a terminal '\0'
[lttng-tools.git] / src / bin / lttng-sessiond / kernel-consumer.c
index 38820af3811e1893ba8a5f6c6109c31599fb7838..7582d80f0dea7eaf17d6d805eb680a4dbb657f15 100644 (file)
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#define _GNU_SOURCE
+#define _LGPL_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
 #include <common/common.h>
 #include <common/defaults.h>
+#include <common/compat/string.h>
 
 #include "consumer.h"
 #include "health-sessiond.h"
@@ -47,12 +47,16 @@ static char *create_channel_path(struct consumer_output *consumer,
                        PERROR("snprintf kernel channel path");
                        goto error;
                }
-               pathname = strndup(tmp_path, sizeof(tmp_path));
+               pathname = lttng_strndup(tmp_path, sizeof(tmp_path));
+               if (!pathname) {
+                       PERROR("lttng_strndup");
+                       goto error;
+               }
 
                /* Create directory */
                ret = run_as_mkdir_recursive(pathname, S_IRWXU | S_IRWXG, uid, gid);
                if (ret < 0) {
-                       if (ret != -EEXIST) {
+                       if (errno != EEXIST) {
                                ERR("Trace directory creation error");
                                goto error;
                        }
@@ -64,7 +68,11 @@ static char *create_channel_path(struct consumer_output *consumer,
                        PERROR("snprintf kernel metadata path");
                        goto error;
                }
-               pathname = strndup(tmp_path, sizeof(tmp_path));
+               pathname = lttng_strndup(tmp_path, sizeof(tmp_path));
+               if (!pathname) {
+                       PERROR("lttng_strndup");
+                       goto error;
+               }
                DBG3("Kernel network consumer subdir path: %s", pathname);
        }
 
@@ -99,14 +107,14 @@ int kernel_consumer_add_channel(struct consumer_socket *sock,
 
        if (monitor) {
                pathname = create_channel_path(consumer, session->uid, session->gid);
-               if (!pathname) {
-                       ret = -1;
-                       goto error;
-               }
        } else {
                /* Empty path. */
                pathname = strdup("");
        }
+       if (!pathname) {
+               ret = -1;
+               goto error;
+       }
 
        /* Prep channel message structure */
        consumer_init_channel_comm_msg(&lkm,
@@ -163,14 +171,14 @@ int kernel_consumer_add_metadata(struct consumer_socket *sock,
 
        if (monitor) {
                pathname = create_channel_path(consumer, session->uid, session->gid);
-               if (!pathname) {
-                       ret = -1;
-                       goto error;
-               }
        } else {
                /* Empty path. */
                pathname = strdup("");
        }
+       if (!pathname) {
+               ret = -1;
+               goto error;
+       }
 
        /* Prep channel message structure */
        consumer_init_channel_comm_msg(&lkm,
@@ -373,14 +381,11 @@ int kernel_consumer_send_session(struct consumer_socket *sock,
 
        DBG("Sending session stream to kernel consumer");
 
-       if (session->metadata_stream_fd >= 0) {
+       if (session->metadata_stream_fd >= 0 && session->metadata) {
                ret = kernel_consumer_add_metadata(sock, session, monitor);
                if (ret < 0) {
                        goto error;
                }
-
-               /* Flag that at least the metadata has been sent to the consumer. */
-               session->consumer_fds_sent = 1;
        }
 
        /* Send channel and streams of it */
@@ -404,6 +409,7 @@ int kernel_consumer_send_session(struct consumer_socket *sock,
 
        DBG("Kernel consumer FDs of metadata and channel streams sent");
 
+       session->consumer_fds_sent = 1;
        return 0;
 
 error:
This page took 0.027938 seconds and 4 git commands to generate.