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)
{
struct lttcomm_consumer_msg msg;
LTTNG_ASSERT(socket);
+ ASSERT_RCU_READ_LOCKED();
DBG2("Consumer push metadata to consumer socket %d", *socket->fd_ptr);