X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fconsumer.cpp;h=3637cb2e57348c7a8fafa17687a1d18a78d0f22d;hb=88b02a8e7cbdbc728cc681cd07bbe0c738964717;hp=95fc2c34875ce9fff37d3454a8c96e7de1e3a7fb;hpb=3c3390532736cfb5198f863d0d2b218e21fcf76d;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/consumer.cpp b/src/bin/lttng-sessiond/consumer.cpp index 95fc2c348..3637cb2e5 100644 --- a/src/bin/lttng-sessiond/consumer.cpp +++ b/src/bin/lttng-sessiond/consumer.cpp @@ -367,6 +367,8 @@ struct consumer_socket *consumer_find_socket_by_bitness(int bits, int consumer_fd; struct consumer_socket *socket = NULL; + ASSERT_RCU_READ_LOCKED(); + switch (bits) { case 64: consumer_fd = uatomic_read(&the_ust_consumerd64_fd); @@ -401,6 +403,8 @@ struct consumer_socket *consumer_find_socket(int key, struct lttng_ht_node_ulong *node; struct consumer_socket *socket = NULL; + ASSERT_RCU_READ_LOCKED(); + /* Negative keys are lookup failures */ if (key < 0 || consumer == NULL) { return NULL; @@ -447,6 +451,7 @@ void consumer_add_socket(struct consumer_socket *sock, { LTTNG_ASSERT(sock); LTTNG_ASSERT(consumer); + ASSERT_RCU_READ_LOCKED(); lttng_ht_add_unique_ulong(consumer->socks, &sock->node); } @@ -463,6 +468,7 @@ void consumer_del_socket(struct consumer_socket *sock, LTTNG_ASSERT(sock); LTTNG_ASSERT(consumer); + ASSERT_RCU_READ_LOCKED(); iter.iter.node = &sock->node.node; ret = lttng_ht_del(consumer->socks, &iter); @@ -483,8 +489,10 @@ static void destroy_socket_rcu(struct rcu_head *head) } /* - * Destroy and free socket pointer in a call RCU. Read side lock must be - * acquired before calling this function. + * Destroy and free socket pointer in a call RCU. The call must either: + * - have acquired the read side lock before calling this function, or + * - guarantee the validity of the `struct consumer_socket` object for the + * duration of the call. */ void consumer_destroy_socket(struct consumer_socket *sock) { @@ -1173,7 +1181,9 @@ int consumer_send_relayd_socket(struct consumer_socket *consumer_sock, msg.u.relayd_sock.net_index = consumer->net_seq_index; msg.u.relayd_sock.type = type; msg.u.relayd_sock.session_id = session_id; - memcpy(&msg.u.relayd_sock.sock, rsock, sizeof(msg.u.relayd_sock.sock)); + msg.u.relayd_sock.major = rsock->major; + msg.u.relayd_sock.minor = rsock->minor; + msg.u.relayd_sock.relayd_socket_protocol = rsock->sock.proto; DBG3("Sending relayd sock info to consumer on %d", *consumer_sock->fd_ptr); ret = consumer_send_msg(consumer_sock, &msg); @@ -1451,6 +1461,7 @@ int consumer_push_metadata(struct consumer_socket *socket, struct lttcomm_consumer_msg msg; LTTNG_ASSERT(socket); + ASSERT_RCU_READ_LOCKED(); DBG2("Consumer push metadata to consumer socket %d", *socket->fd_ptr);