X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fconsumer.cpp;h=1a602762c16a2e5d99654a89b48ca376f238e883;hb=48b7cdc221a445188d6d9bd08fc1686837e71224;hp=ba4e2470f30c3b50ec670bc886f89c5d01d69cf2;hpb=ff9fe3137fc1aec6e18ebbf7c218907698206e7d;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/consumer.cpp b/src/bin/lttng-sessiond/consumer.cpp index ba4e2470f..1a602762c 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) { @@ -564,7 +572,7 @@ static void consumer_release_output(struct urcu_ref *ref) if (obj->socks) { /* Finally destroy HT */ - ht_cleanup_push(obj->socks); + lttng_ht_destroy(obj->socks); } free(obj); @@ -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);