X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-consumer.cpp;h=9098f9cd33250b5496e317dfaad7eaf123386488;hb=d7bfb9b0fa35679d3e728b9165699d9faf905539;hp=86b96a9bd5e9505002e0413da7970dd9d30520ee;hpb=c9e313bc594f40a86eed237dce222c0fc99c957f;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-consumer.cpp b/src/bin/lttng-sessiond/ust-consumer.cpp index 86b96a9bd..9098f9cd3 100644 --- a/src/bin/lttng-sessiond/ust-consumer.cpp +++ b/src/bin/lttng-sessiond/ust-consumer.cpp @@ -25,6 +25,8 @@ #include "session.hpp" #include "lttng-sessiond.hpp" +namespace lsu = lttng::sessiond::ust; + /* * Send a single channel to the consumer using command ASK_CHANNEL_CREATION. * @@ -34,7 +36,7 @@ static int ask_channel_creation(struct ust_app_session *ua_sess, struct ust_app_channel *ua_chan, struct consumer_output *consumer, struct consumer_socket *socket, - struct ust_registry_session *registry, + ust_registry_session *registry, struct lttng_trace_chunk *trace_chunk) { int ret, output; @@ -42,7 +44,6 @@ static int ask_channel_creation(struct ust_app_session *ua_sess, uint64_t key, chan_reg_key; char *pathname = NULL; struct lttcomm_consumer_msg msg; - struct ust_registry_channel *ust_reg_chan; char shm_path[PATH_MAX] = ""; char root_shm_path[PATH_MAX] = ""; bool is_local_trace; @@ -105,9 +106,13 @@ static int ask_channel_creation(struct ust_app_session *ua_sess, * those buffer files. */ } else { - ust_reg_chan = ust_registry_channel_find(registry, chan_reg_key); - LTTNG_ASSERT(ust_reg_chan); - chan_id = ust_reg_chan->chan_id; + { + auto locked_registry = registry->lock(); + auto& ust_reg_chan = registry->get_channel(chan_reg_key); + + chan_id = ust_reg_chan.id; + } + if (ua_sess->shm_path[0]) { strncpy(shm_path, ua_sess->shm_path, sizeof(shm_path)); shm_path[sizeof(shm_path) - 1] = '\0'; @@ -196,7 +201,7 @@ int ust_consumer_ask_channel(struct ust_app_session *ua_sess, struct ust_app_channel *ua_chan, struct consumer_output *consumer, struct consumer_socket *socket, - struct ust_registry_session *registry, + ust_registry_session *registry, struct lttng_trace_chunk * trace_chunk) { int ret; @@ -445,7 +450,7 @@ int ust_consumer_metadata_request(struct consumer_socket *socket) ssize_t ret_push; struct lttcomm_metadata_request_msg request; struct buffer_reg_uid *reg_uid; - struct ust_registry_session *ust_reg; + ust_registry_session *ust_reg; struct lttcomm_consumer_msg msg; LTTNG_ASSERT(socket); @@ -493,9 +498,10 @@ int ust_consumer_metadata_request(struct consumer_socket *socket) } LTTNG_ASSERT(ust_reg); - pthread_mutex_lock(&ust_reg->lock); - ret_push = ust_app_push_metadata(ust_reg, socket, 1); - pthread_mutex_unlock(&ust_reg->lock); + { + auto locked_ust_reg = ust_reg->lock(); + ret_push = ust_app_push_metadata(locked_ust_reg, socket, 1); + } if (ret_push == -EPIPE) { DBG("Application or relay closed while pushing metadata"); } else if (ret_push < 0) {