X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-consumer.cpp;h=df4689920eb0b90ffff3eb45c368b42be8727c28;hb=6d31b87d46a9301fe86d273616ab3d7214d24e65;hp=a68c5d96dc99070304357d3a723b136191868ecc;hpb=7966af5763c4aaca39df9bbfa9277ff15715c720;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-consumer.cpp b/src/bin/lttng-sessiond/ust-consumer.cpp index a68c5d96d..df4689920 100644 --- a/src/bin/lttng-sessiond/ust-consumer.cpp +++ b/src/bin/lttng-sessiond/ust-consumer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 David Goulet + * Copyright (C) 2011 EfficiOS Inc. * * SPDX-License-Identifier: GPL-2.0-only * @@ -12,18 +12,20 @@ #include #include -#include -#include -#include -#include +#include +#include +#include +#include -#include "consumer.h" -#include "health-sessiond.h" -#include "ust-consumer.h" -#include "lttng-ust-error.h" -#include "buffer-registry.h" -#include "session.h" -#include "lttng-sessiond.h" +#include "consumer.hpp" +#include "health-sessiond.hpp" +#include "ust-consumer.hpp" +#include "lttng-ust-error.hpp" +#include "buffer-registry.hpp" +#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, + lsu::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, + lsu::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; + lsu::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) {