X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fconsumer.cpp;h=238da05085739aaca35506b543b10380e89c1197;hb=c9e313bc594f40a86eed237dce222c0fc99c957f;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..238da0508 100644 --- a/src/bin/lttng-sessiond/consumer.cpp +++ b/src/bin/lttng-sessiond/consumer.cpp @@ -15,17 +15,17 @@ #include #include -#include -#include -#include -#include -#include - -#include "consumer.h" -#include "health-sessiond.h" -#include "ust-app.h" -#include "utils.h" -#include "lttng-sessiond.h" +#include +#include +#include +#include +#include + +#include "consumer.hpp" +#include "health-sessiond.hpp" +#include "ust-app.hpp" +#include "utils.hpp" +#include "lttng-sessiond.hpp" /* * Return allocated full pathname of the session using the consumer trace path @@ -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) { @@ -1001,8 +1009,6 @@ void consumer_init_add_channel_comm_msg(struct lttcomm_consumer_msg *msg, uint64_t channel_key, uint64_t session_id, const char *pathname, - uid_t uid, - gid_t gid, uint64_t relayd_id, const char *name, unsigned int nb_init_streams, @@ -1173,7 +1179,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 +1459,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); @@ -1496,7 +1505,7 @@ end: */ enum lttng_error_code consumer_snapshot_channel(struct consumer_socket *socket, uint64_t key, const struct consumer_output *output, int metadata, - uid_t uid, gid_t gid, const char *channel_path, int wait, + const char *channel_path, uint64_t nb_packets_per_stream) { int ret; @@ -1676,7 +1685,7 @@ end: * chunk each stream is currently writing to (for the rotate_pending operation). */ int consumer_rotate_channel(struct consumer_socket *socket, uint64_t key, - uid_t uid, gid_t gid, struct consumer_output *output, + struct consumer_output *output, bool is_metadata_channel) { int ret; @@ -1722,6 +1731,7 @@ int consumer_open_channel_packets(struct consumer_socket *socket, uint64_t key) int ret; lttcomm_consumer_msg msg = { .cmd_type = LTTNG_CONSUMER_OPEN_CHANNEL_PACKETS, + .u = {}, }; msg.u.open_channel_packets.key = key; @@ -1777,6 +1787,7 @@ int consumer_init(struct consumer_socket *socket, int ret; struct lttcomm_consumer_msg msg = { .cmd_type = LTTNG_CONSUMER_INIT, + .u = {}, }; LTTNG_ASSERT(socket); @@ -1821,6 +1832,7 @@ int consumer_create_trace_chunk(struct consumer_socket *socket, enum lttng_trace_chunk_status tc_status; struct lttcomm_consumer_msg msg = { .cmd_type = LTTNG_CONSUMER_CREATE_TRACE_CHUNK, + .u = {}, }; msg.u.create_trace_chunk.session_id = session_id; @@ -1975,6 +1987,7 @@ int consumer_close_trace_chunk(struct consumer_socket *socket, enum lttng_trace_chunk_status chunk_status; lttcomm_consumer_msg msg = { .cmd_type = LTTNG_CONSUMER_CLOSE_TRACE_CHUNK, + .u = {}, }; msg.u.close_trace_chunk.session_id = session_id; @@ -2101,6 +2114,7 @@ int consumer_trace_chunk_exists(struct consumer_socket *socket, enum lttng_trace_chunk_status chunk_status; lttcomm_consumer_msg msg = { .cmd_type = LTTNG_CONSUMER_TRACE_CHUNK_EXISTS, + .u = {}, }; msg.u.trace_chunk_exists.session_id = session_id;