libust ABI: export streams
[lttng-ust.git] / libust / lttng-ust-comm.c
index 9400b6b8ff9f6fdb74e4461aa6d6e1cf464e0b59..d88c4afb2346c000dedd5a96c9fa5239f37bb265 100644 (file)
@@ -217,6 +217,9 @@ int handle_register_done(struct sock_info *sock_info)
        if (sock_info->constructor_sem_posted)
                return 0;
        sock_info->constructor_sem_posted = 1;
+       if (uatomic_read(&sem_count) <= 0) {
+               return 0;
+       }
        ret = uatomic_add_return(&sem_count, -1);
        if (ret == 0) {
                ret = sem_post(&constructor_wait);
@@ -279,8 +282,33 @@ end:
        } else {
                lur.ret_code = LTTCOMM_SESSION_FAIL;
        }
+       if (lum->cmd == 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;
+       }
        ret = send_reply(sock, &lur);
 
+       if (lum->cmd == LTTNG_UST_STREAM && ret >= 0) {
+               /* we also need to send the file descriptors. */
+               ret = lttcomm_send_fds_unix_sock(sock,
+                       &lum->u.stream.shm_fd, &lum->u.stream.shm_fd,
+                       1, sizeof(int));
+               if (ret < 0) {
+                       perror("send shm_fd");
+                       goto error;
+               }
+               ret = lttcomm_send_fds_unix_sock(sock,
+                       &lum->u.stream.wait_fd, &lum->u.stream.wait_fd,
+                       1, sizeof(int));
+               if (ret < 0) {
+                       perror("send wait_fd");
+                       goto error;
+               }
+       }
+error:
        ust_unlock();
        return ret;
 }
This page took 0.025352 seconds and 4 git commands to generate.