int consumer_fd;
struct consumer_socket *socket = NULL;
+ ASSERT_RCU_READ_LOCKED();
+
switch (bits) {
case 64:
consumer_fd = uatomic_read(&the_ust_consumerd64_fd);
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;
{
LTTNG_ASSERT(sock);
LTTNG_ASSERT(consumer);
+ ASSERT_RCU_READ_LOCKED();
lttng_ht_add_unique_ulong(consumer->socks, &sock->node);
}
LTTNG_ASSERT(sock);
LTTNG_ASSERT(consumer);
+ ASSERT_RCU_READ_LOCKED();
iter.iter.node = &sock->node.node;
ret = lttng_ht_del(consumer->socks, &iter);
}
/*
- * 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)
{
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);
struct lttcomm_consumer_msg msg;
LTTNG_ASSERT(socket);
+ ASSERT_RCU_READ_LOCKED();
DBG2("Consumer push metadata to consumer socket %d", *socket->fd_ptr);