X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Flttng-ust-comm.c;h=2e7e1a3515abd1f6b46024364ddb1747057e8a4f;hb=193183fb924aef705f30358e54e7386a3a64c78d;hp=d88c4afb2346c000dedd5a96c9fa5239f37bb265;hpb=381c0f1ef474e0ae8a96b3753470ca4bda45c764;p=lttng-ust.git diff --git a/libust/lttng-ust-comm.c b/libust/lttng-ust-comm.c index d88c4afb..2e7e1a35 100644 --- a/libust/lttng-ust-comm.c +++ b/libust/lttng-ust-comm.c @@ -235,6 +235,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,28 +281,43 @@ 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; } - 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_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 && ret >= 0) { + if ((lum->cmd == LTTNG_UST_STREAM || lum->cmd == LTTNG_UST_CHANNEL) + && lur.ret_code == LTTCOMM_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, + &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, + &wait_fd, &wait_fd, 1, sizeof(int)); if (ret < 0) { perror("send wait_fd");