From 8010679a3797cde3e1ffd91c72c6ed44cc4af930 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Thu, 3 Nov 2011 15:01:43 -0400 Subject: [PATCH] Fix UST consumer FD send: channels only send one FD Signed-off-by: Mathieu Desnoyers --- lttng-sessiond/ust-consumer.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/lttng-sessiond/ust-consumer.c b/lttng-sessiond/ust-consumer.c index 605870d52..9a4c47d83 100644 --- a/lttng-sessiond/ust-consumer.c +++ b/lttng-sessiond/ust-consumer.c @@ -36,8 +36,7 @@ static int send_channel_streams(int sock, struct ust_app_channel *uchan) { - int ret, fds[2]; - struct ltt_ust_stream *stream; + int ret, fd; struct lttcomm_consumer_msg lum; struct cds_lfht_iter iter; struct cds_lfht_node *node; @@ -60,26 +59,23 @@ static int send_channel_streams(int sock, perror("send consumer channel"); goto error; } - fds[0] = uchan->obj->shm_fd; - fds[1] = uchan->obj->wait_fd; - ret = lttcomm_send_fds_unix_sock(sock, fds, 2); + fd = uchan->obj->shm_fd; + ret = lttcomm_send_fds_unix_sock(sock, &fd, 1); if (ret < 0) { perror("send consumer channel ancillary data"); goto error; } - rcu_read_lock(); hashtable_get_first(uchan->streams, &iter); while ((node = hashtable_iter_get_node(&iter)) != NULL) { - stream = caa_container_of(node, struct ltt_ust_stream, node); - + struct ltt_ust_stream *stream = + caa_container_of(node, struct ltt_ust_stream, node); int fds[2]; if (!stream->obj->shm_fd) { goto next; } - lum.cmd_type = LTTNG_CONSUMER_ADD_STREAM; lum.u.stream.channel_key = uchan->obj->shm_fd; lum.u.stream.stream_key = stream->obj->shm_fd; @@ -131,6 +127,7 @@ int ust_consumer_send_session(int consumer_fd, struct ust_app_session *usess) DBG("Sending metadata stream fd"); if (usess->metadata->obj->shm_fd != 0) { + int fd; int fds[2]; /* Send metadata channel fd */ @@ -144,9 +141,8 @@ int ust_consumer_send_session(int consumer_fd, struct ust_app_session *usess) perror("send consumer channel"); goto error; } - fds[0] = usess->metadata->obj->shm_fd; - fds[1] = usess->metadata->obj->wait_fd; - ret = lttcomm_send_fds_unix_sock(sock, fds, 2); + fd = usess->metadata->obj->shm_fd; + ret = lttcomm_send_fds_unix_sock(sock, &fd, 1); if (ret < 0) { perror("send consumer metadata channel"); goto error; -- 2.34.1