X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Flttng-ust-comm.c;h=d88c4afb2346c000dedd5a96c9fa5239f37bb265;hb=381c0f1ef474e0ae8a96b3753470ca4bda45c764;hp=9400b6b8ff9f6fdb74e4461aa6d6e1cf464e0b59;hpb=c0eedf810db01116d90e57e6eda9b6a950e5c515;p=lttng-ust.git diff --git a/libust/lttng-ust-comm.c b/libust/lttng-ust-comm.c index 9400b6b8..d88c4afb 100644 --- a/libust/lttng-ust-comm.c +++ b/libust/lttng-ust-comm.c @@ -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; }