X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=libust%2Flttng-ust-comm.c;h=ba60053627ace1c0bbf01737890272f4b90178ba;hb=43861eabbb8d36a63e9b0d0cee5ed1193436d600;hp=d88c4afb2346c000dedd5a96c9fa5239f37bb265;hpb=381c0f1ef474e0ae8a96b3753470ca4bda45c764;p=lttng-ust.git diff --git a/libust/lttng-ust-comm.c b/libust/lttng-ust-comm.c index d88c4afb..ba600536 100644 --- a/libust/lttng-ust-comm.c +++ b/libust/lttng-ust-comm.c @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -181,18 +182,18 @@ int register_app_to_sessiond(int socket) return -errno; } - ret = lttcomm_send_unix_sock(socket, ®_msg, sizeof(reg_msg)); + ret = ustcomm_send_unix_sock(socket, ®_msg, sizeof(reg_msg)); if (ret >= 0 && ret != sizeof(reg_msg)) return -EIO; return ret; } static -int send_reply(int sock, struct lttcomm_ust_reply *lur) +int send_reply(int sock, struct ustcomm_ust_reply *lur) { ssize_t len; - len = lttcomm_send_unix_sock(sock, lur, sizeof(*lur)); + len = ustcomm_send_unix_sock(sock, lur, sizeof(*lur)); switch (len) { case sizeof(*lur): DBG("message successfully sent"); @@ -230,11 +231,12 @@ int handle_register_done(struct sock_info *sock_info) static int handle_message(struct sock_info *sock_info, - int sock, struct lttcomm_ust_msg *lum) + int sock, struct ustcomm_ust_msg *lum) { int ret = 0; const struct objd_ops *ops; - struct lttcomm_ust_reply lur; + struct ustcomm_ust_reply lur; + int shm_fd, wait_fd; ust_lock(); @@ -278,30 +280,51 @@ end: lur.cmd = lum->cmd; lur.ret_val = ret; if (ret >= 0) { - lur.ret_code = LTTCOMM_OK; + lur.ret_code = USTCOMM_OK; } else { - lur.ret_code = LTTCOMM_SESSION_FAIL; + //lur.ret_code = USTCOMM_SESSION_FAIL; + lur.ret_code = ret; } - if (lum->cmd == LTTNG_UST_STREAM) { + 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; + case LTTNG_UST_VERSION: + lur.u.version = lum->u.version; + break; } ret = send_reply(sock, &lur); + if (ret < 0) { + perror("error sending reply"); + goto error; + } - if (lum->cmd == LTTNG_UST_STREAM && ret >= 0) { + if ((lum->cmd == LTTNG_UST_STREAM + || lum->cmd == LTTNG_UST_CHANNEL + || lum->cmd == LTTNG_UST_METADATA) + && lur.ret_code == USTCOMM_OK) { /* 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, + ret = ustcomm_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, - &lum->u.stream.wait_fd, &lum->u.stream.wait_fd, + ret = ustcomm_send_fds_unix_sock(sock, + &wait_fd, &wait_fd, 1, sizeof(int)); if (ret < 0) { perror("send wait_fd"); @@ -600,7 +623,7 @@ restart: } /* Register */ - ret = lttcomm_connect_unix_sock(sock_info->sock_path); + ret = ustcomm_connect_unix_sock(sock_info->sock_path); if (ret < 0) { ERR("Error connecting to %s apps socket", sock_info->name); prev_connect_failed = 1; @@ -622,7 +645,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; @@ -647,9 +670,9 @@ restart: for (;;) { ssize_t len; - struct lttcomm_ust_msg lum; + struct ustcomm_ust_msg lum; - len = lttcomm_recv_unix_sock(sock, &lum, sizeof(lum)); + len = ustcomm_recv_unix_sock(sock, &lum, sizeof(lum)); switch (len) { case 0: /* orderly shutdown */ DBG("%s ltt-sessiond has performed an orderly shutdown\n", sock_info->name); @@ -905,6 +928,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();