X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libust%2Flttng-ust-comm.c;h=7971168c638b2d14fdf0864ec3bb6a0b35ec840e;hb=35ec2526b0bd16c7ee9884fda90b8e761e75425d;hp=1507a65fcd588a3276d863d87f36a1ff1c22d295;hpb=a285a37667147f0e7ade6b45d147440438ee4d50;p=lttng-ust.git diff --git a/libust/lttng-ust-comm.c b/libust/lttng-ust-comm.c index 1507a65f..7971168c 100644 --- a/libust/lttng-ust-comm.c +++ b/libust/lttng-ust-comm.c @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -184,10 +185,6 @@ int register_app_to_sessiond(int socket) ret = lttcomm_send_unix_sock(socket, ®_msg, sizeof(reg_msg)); if (ret >= 0 && ret != sizeof(reg_msg)) return -EIO; - ret = fdatasync(socket); - if (ret) { - return -errno; - } return ret; } @@ -195,17 +192,11 @@ static int send_reply(int sock, struct lttcomm_ust_reply *lur) { ssize_t len; - int ret; len = lttcomm_send_unix_sock(sock, lur, sizeof(*lur)); switch (len) { case sizeof(*lur): DBG("message successfully sent"); - ret = fdatasync(sock); - if (ret) { - DBG("fdatasync error"); - return -1; - } return 0; case -1: if (errno == ECONNRESET) { @@ -245,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(); @@ -290,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; } @@ -607,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; @@ -890,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();