Remove empty line from tracepoint.h
[lttng-ust.git] / libust / lttng-ust-comm.c
index c5a3064ae216f222771e7acd99199ea12a520085..7971168c638b2d14fdf0864ec3bb6a0b35ec840e 100644 (file)
@@ -39,6 +39,7 @@
 #include <urcu/futex.h>
 
 #include <lttng-ust-comm.h>
+#include <ust/lttng-events.h>
 #include <ust/usterr-signal-safe.h>
 #include <ust/lttng-ust-abi.h>
 #include <ust/tracepoint.h>
@@ -235,6 +236,7 @@ int handle_message(struct sock_info *sock_info,
        int ret = 0;
        const struct objd_ops *ops;
        struct lttcomm_ust_reply lur;
+       int shm_fd, wait_fd;
 
        ust_lock();
 
@@ -280,10 +282,53 @@ end:
        if (ret >= 0) {
                lur.ret_code = LTTCOMM_OK;
        } else {
-               lur.ret_code = LTTCOMM_SESSION_FAIL;
+               //lur.ret_code = LTTCOMM_SESSION_FAIL;
+               lur.ret_code = ret;
+       }
+       switch (lum->cmd) {
+       case LTTNG_UST_STREAM:
+               /*
+                * Special-case reply to send stream info.
+                * Use lum.u output.
+                */
+               lur.u.stream.memory_map_size = lum->u.stream.memory_map_size;
+               shm_fd = lum->u.stream.shm_fd;
+               wait_fd = lum->u.stream.wait_fd;
+               break;
+       case LTTNG_UST_METADATA:
+       case LTTNG_UST_CHANNEL:
+               lur.u.channel.memory_map_size = lum->u.channel.memory_map_size;
+               shm_fd = lum->u.channel.shm_fd;
+               wait_fd = lum->u.channel.wait_fd;
+               break;
        }
        ret = send_reply(sock, &lur);
+       if (ret < 0) {
+               perror("error sending reply");
+               goto error;
+       }
 
+       if ((lum->cmd == LTTNG_UST_STREAM
+            || lum->cmd == LTTNG_UST_CHANNEL
+            || lum->cmd == LTTNG_UST_METADATA)
+                       && lur.ret_code == LTTCOMM_OK) {
+               /* we also need to send the file descriptors. */
+               ret = lttcomm_send_fds_unix_sock(sock,
+                       &shm_fd, &shm_fd,
+                       1, sizeof(int));
+               if (ret < 0) {
+                       perror("send shm_fd");
+                       goto error;
+               }
+               ret = lttcomm_send_fds_unix_sock(sock,
+                       &wait_fd, &wait_fd,
+                       1, sizeof(int));
+               if (ret < 0) {
+                       perror("send wait_fd");
+                       goto error;
+               }
+       }
+error:
        ust_unlock();
        return ret;
 }
@@ -597,7 +642,7 @@ restart:
         */
        if (sock_info->root_handle == -1) {
                ret = lttng_abi_create_root_handle();
-               if (ret) {
+               if (ret < 0) {
                        ERR("Error creating root handle");
                        ust_unlock();
                        goto quit;
@@ -880,6 +925,7 @@ void ust_after_fork_child(ust_fork_info_t *fork_info)
        /* Release urcu mutexes */
        rcu_bp_after_fork_child();
        lttng_ust_cleanup(0);
+       lttng_context_vtid_reset();
        /* Release mutexes and reenable signals */
        ust_after_fork_common(fork_info);
        lttng_ust_init();
This page took 0.034939 seconds and 4 git commands to generate.