X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.cpp;h=90b0b65b729d5614f89665b839886a939ebaaa90;hb=66cefebdc240cbae0bc79594305f509b0779fa98;hp=3ca4279a9404da1545b98f4e9acabe156d2e6eef;hpb=b0f2e8db59fcadc8f4b06a94175792be3c431004;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-app.cpp b/src/bin/lttng-sessiond/ust-app.cpp index 3ca4279a9..90b0b65b7 100644 --- a/src/bin/lttng-sessiond/ust-app.cpp +++ b/src/bin/lttng-sessiond/ust-app.cpp @@ -66,8 +66,7 @@ struct lttng_ht *ust_app_ht; struct lttng_ht *ust_app_ht_by_sock; struct lttng_ht *ust_app_ht_by_notify_sock; -static -int ust_app_flush_app_session(struct ust_app *app, struct ust_app_session *ua_sess); +static int ust_app_flush_app_session(struct ust_app *app, struct ust_app_session *ua_sess); /* Next available channel key. Access under next_channel_key_lock. */ static uint64_t _next_channel_key; @@ -86,10 +85,9 @@ namespace { * A registry per UID object MUST exists before calling this function or else * it LTTNG_ASSERT() if not found. RCU read side lock must be acquired. */ -static lsu::registry_session *get_session_registry( - const struct ust_app_session *ua_sess) +static lsu::registry_session *get_session_registry(const struct ust_app_session *ua_sess) { - lsu::registry_session *registry = NULL; + lsu::registry_session *registry = nullptr; LTTNG_ASSERT(ua_sess); @@ -105,9 +103,10 @@ static lsu::registry_session *get_session_registry( } case LTTNG_BUFFER_PER_UID: { - struct buffer_reg_uid *reg_uid = buffer_reg_uid_find( - ua_sess->tracing_id, ua_sess->bits_per_long, - lttng_credentials_get_uid(&ua_sess->real_credentials)); + struct buffer_reg_uid *reg_uid = + buffer_reg_uid_find(ua_sess->tracing_id, + ua_sess->bits_per_long, + lttng_credentials_get_uid(&ua_sess->real_credentials)); if (!reg_uid) { goto error; } @@ -122,22 +121,21 @@ error: return registry; } -lsu::registry_session::locked_ptr -get_locked_session_registry(const struct ust_app_session *ua_sess) +lsu::registry_session::locked_ptr get_locked_session_registry(const struct ust_app_session *ua_sess) { auto session = get_session_registry(ua_sess); if (session) { pthread_mutex_lock(&session->_lock); } - return lsu::registry_session::locked_ptr{session}; + return lsu::registry_session::locked_ptr{ session }; } } /* namespace */ /* * Return the incremented value of next_channel_key. */ -static uint64_t get_next_channel_key(void) +static uint64_t get_next_channel_key() { uint64_t ret; @@ -150,7 +148,7 @@ static uint64_t get_next_channel_key(void) /* * Return the atomically incremented value of next_session_id. */ -static uint64_t get_next_session_id(void) +static uint64_t get_next_session_id() { uint64_t ret; @@ -160,9 +158,8 @@ static uint64_t get_next_session_id(void) return ret; } -static void copy_channel_attr_to_ustctl( - struct lttng_ust_ctl_consumer_channel_attr *attr, - struct lttng_ust_abi_channel_attr *uattr) +static void copy_channel_attr_to_ustctl(struct lttng_ust_ctl_consumer_channel_attr *attr, + struct lttng_ust_abi_channel_attr *uattr) { /* Copy event attributes since the layout is different. */ attr->subbuf_size = uattr->subbuf_size; @@ -202,9 +199,8 @@ static int ht_match_ust_app_event(struct cds_lfht_node *node, const void *_key) /* Event loglevel. */ if (ev_loglevel_value != key->loglevel_type) { - if (event->attr.loglevel_type == LTTNG_UST_ABI_LOGLEVEL_ALL - && key->loglevel_type == 0 && - ev_loglevel_value == -1) { + if (event->attr.loglevel_type == LTTNG_UST_ABI_LOGLEVEL_ALL && + key->loglevel_type == 0 && ev_loglevel_value == -1) { /* * Match is accepted. This is because on event creation, the * loglevel is set to -1 if the event loglevel type is ALL so 0 and @@ -224,8 +220,7 @@ static int ht_match_ust_app_event(struct cds_lfht_node *node, const void *_key) if (key->filter && event->filter) { /* Both filters exists, check length followed by the bytecode. */ if (event->filter->len != key->filter->len || - memcmp(event->filter->data, key->filter->data, - event->filter->len) != 0) { + memcmp(event->filter->data, key->filter->data, event->filter->len) != 0) { goto no_match; } } @@ -238,13 +233,13 @@ static int ht_match_ust_app_event(struct cds_lfht_node *node, const void *_key) if (key->exclusion && event->exclusion) { /* Both exclusions exists, check count followed by the names. */ if (event->exclusion->count != key->exclusion->count || - memcmp(event->exclusion->names, key->exclusion->names, - event->exclusion->count * LTTNG_UST_ABI_SYM_NAME_LEN) != 0) { + memcmp(event->exclusion->names, + key->exclusion->names, + event->exclusion->count * LTTNG_UST_ABI_SYM_NAME_LEN) != 0) { goto no_match; } } - /* Match. */ return 1; @@ -256,8 +251,7 @@ no_match: * Unique add of an ust app event in the given ht. This uses the custom * ht_match_ust_app_event match function and the event name as hash. */ -static void add_unique_ust_app_event(struct ust_app_channel *ua_chan, - struct ust_app_event *event) +static void add_unique_ust_app_event(struct ust_app_channel *ua_chan, struct ust_app_event *event) { struct cds_lfht_node *node_ptr; struct ust_app_ht_key key; @@ -274,8 +268,10 @@ static void add_unique_ust_app_event(struct ust_app_channel *ua_chan, key.exclusion = event->exclusion; node_ptr = cds_lfht_add_unique(ht->ht, - ht->hash_fct(event->node.key, lttng_ht_seed), - ht_match_ust_app_event, &key, &event->node.node); + ht->hash_fct(event->node.key, lttng_ht_seed), + ht_match_ust_app_event, + &key, + &event->node.node); LTTNG_ASSERT(node_ptr == &event->node.node); } @@ -287,7 +283,7 @@ static void close_notify_sock_rcu(struct rcu_head *head) { int ret; struct ust_app_notify_sock_obj *obj = - caa_container_of(head, struct ust_app_notify_sock_obj, head); + lttng::utils::container_of(head, &ust_app_notify_sock_obj::head); /* Must have a valid fd here. */ LTTNG_ASSERT(obj->fd >= 0); @@ -305,9 +301,7 @@ static void close_notify_sock_rcu(struct rcu_head *head) * Delete ust context safely. RCU read lock must be held before calling * this function. */ -static -void delete_ust_app_ctx(int sock, struct ust_app_ctx *ua_ctx, - struct ust_app *app) +static void delete_ust_app_ctx(int sock, struct ust_app_ctx *ua_ctx, struct ust_app *app) { int ret; @@ -321,14 +315,18 @@ void delete_ust_app_ctx(int sock, struct ust_app_ctx *ua_ctx, if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app release ctx failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app release ctx failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app release ctx obj handle %d failed with ret %d: pid = %d, sock = %d", - ua_ctx->obj->handle, ret, - app->pid, app->sock); + ua_ctx->obj->handle, + ret, + app->pid, + app->sock); } } free(ua_ctx->obj); @@ -340,9 +338,7 @@ void delete_ust_app_ctx(int sock, struct ust_app_ctx *ua_ctx, * Delete ust app event safely. RCU read lock must be held before calling * this function. */ -static -void delete_ust_app_event(int sock, struct ust_app_event *ua_event, - struct ust_app *app) +static void delete_ust_app_event(int sock, struct ust_app_event *ua_event, struct ust_app *app) { int ret; @@ -350,22 +346,26 @@ void delete_ust_app_event(int sock, struct ust_app_event *ua_event, ASSERT_RCU_READ_LOCKED(); free(ua_event->filter); - if (ua_event->exclusion != NULL) + if (ua_event->exclusion != nullptr) free(ua_event->exclusion); - if (ua_event->obj != NULL) { + if (ua_event->obj != nullptr) { pthread_mutex_lock(&app->sock_lock); ret = lttng_ust_ctl_release_object(sock, ua_event->obj); pthread_mutex_unlock(&app->sock_lock); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app release event failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app release event failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app release event obj failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } } free(ua_event->obj); @@ -377,11 +377,10 @@ void delete_ust_app_event(int sock, struct ust_app_event *ua_event, * Delayed reclaim of a ust_app_event_notifier_rule object. This MUST be called * through a call_rcu(). */ -static -void free_ust_app_event_notifier_rule_rcu(struct rcu_head *head) +static void free_ust_app_event_notifier_rule_rcu(struct rcu_head *head) { - struct ust_app_event_notifier_rule *obj = caa_container_of( - head, struct ust_app_event_notifier_rule, rcu_head); + struct ust_app_event_notifier_rule *obj = + lttng::utils::container_of(head, &ust_app_event_notifier_rule::rcu_head); free(obj); } @@ -389,32 +388,35 @@ void free_ust_app_event_notifier_rule_rcu(struct rcu_head *head) /* * Delete ust app event notifier rule safely. */ -static void delete_ust_app_event_notifier_rule(int sock, - struct ust_app_event_notifier_rule *ua_event_notifier_rule, - struct ust_app *app) +static void delete_ust_app_event_notifier_rule( + int sock, struct ust_app_event_notifier_rule *ua_event_notifier_rule, struct ust_app *app) { int ret; LTTNG_ASSERT(ua_event_notifier_rule); - if (ua_event_notifier_rule->exclusion != NULL) { + if (ua_event_notifier_rule->exclusion != nullptr) { free(ua_event_notifier_rule->exclusion); } - if (ua_event_notifier_rule->obj != NULL) { + if (ua_event_notifier_rule->obj != nullptr) { pthread_mutex_lock(&app->sock_lock); ret = lttng_ust_ctl_release_object(sock, ua_event_notifier_rule->obj); pthread_mutex_unlock(&app->sock_lock); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app release event notifier failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app release event notifier failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app release event notifier failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } } @@ -422,8 +424,7 @@ static void delete_ust_app_event_notifier_rule(int sock, } lttng_trigger_put(ua_event_notifier_rule->trigger); - call_rcu(&ua_event_notifier_rule->rcu_head, - free_ust_app_event_notifier_rule_rcu); + call_rcu(&ua_event_notifier_rule->rcu_head, free_ust_app_event_notifier_rule_rcu); } /* @@ -431,8 +432,7 @@ static void delete_ust_app_event_notifier_rule(int sock, * * Return 0 on success or else a negative value. */ -static int release_ust_app_stream(int sock, struct ust_app_stream *stream, - struct ust_app *app) +static int release_ust_app_stream(int sock, struct ust_app_stream *stream, struct ust_app *app) { int ret = 0; @@ -445,13 +445,17 @@ static int release_ust_app_stream(int sock, struct ust_app_stream *stream, if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app release stream failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app release stream failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app release stream obj failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } } lttng_fd_put(LTTNG_FD_APPS, 2); @@ -465,9 +469,7 @@ static int release_ust_app_stream(int sock, struct ust_app_stream *stream, * Delete ust app stream safely. RCU read lock must be held before calling * this function. */ -static -void delete_ust_app_stream(int sock, struct ust_app_stream *stream, - struct ust_app *app) +static void delete_ust_app_stream(int sock, struct ust_app_stream *stream, struct ust_app *app) { LTTNG_ASSERT(stream); ASSERT_RCU_READ_LOCKED(); @@ -476,11 +478,10 @@ void delete_ust_app_stream(int sock, struct ust_app_stream *stream, free(stream); } -static -void delete_ust_app_channel_rcu(struct rcu_head *head) +static void delete_ust_app_channel_rcu(struct rcu_head *head) { struct ust_app_channel *ua_chan = - caa_container_of(head, struct ust_app_channel, rcu_head); + lttng::utils::container_of(head, &ust_app_channel::rcu_head); lttng_ht_destroy(ua_chan->ctx); lttng_ht_destroy(ua_chan->events); @@ -494,8 +495,7 @@ void delete_ust_app_channel_rcu(struct rcu_head *head) * * The session list lock must be held by the caller. */ -static -void save_per_pid_lost_discarded_counters(struct ust_app_channel *ua_chan) +static void save_per_pid_lost_discarded_counters(struct ust_app_channel *ua_chan) { uint64_t discarded = 0, lost = 0; struct ltt_session *session; @@ -528,16 +528,17 @@ void save_per_pid_lost_discarded_counters(struct ust_app_channel *ua_chan) if (ua_chan->attr.overwrite) { consumer_get_lost_packets(ua_chan->session->tracing_id, - ua_chan->key, session->ust_session->consumer, - &lost); + ua_chan->key, + session->ust_session->consumer, + &lost); } else { consumer_get_discarded_events(ua_chan->session->tracing_id, - ua_chan->key, session->ust_session->consumer, - &discarded); + ua_chan->key, + session->ust_session->consumer, + &discarded); } - uchan = trace_ust_find_channel_by_name( - session->ust_session->domain_global.channels, - ua_chan->name); + uchan = trace_ust_find_channel_by_name(session->ust_session->domain_global.channels, + ua_chan->name); if (!uchan) { ERR("Missing UST channel to store discarded counters"); goto end; @@ -560,9 +561,9 @@ end: * The session list lock must be held by the caller. */ static void delete_ust_app_channel(int sock, - struct ust_app_channel *ua_chan, - struct ust_app *app, - const lsu::registry_session::locked_ptr& locked_registry) + struct ust_app_channel *ua_chan, + struct ust_app *app, + const lsu::registry_session::locked_ptr& locked_registry) { int ret; struct lttng_ht_iter iter; @@ -576,13 +577,13 @@ static void delete_ust_app_channel(int sock, DBG3("UST app deleting channel %s", ua_chan->name); /* Wipe stream */ - cds_list_for_each_entry_safe(stream, stmp, &ua_chan->streams.head, list) { + cds_list_for_each_entry_safe (stream, stmp, &ua_chan->streams.head, list) { cds_list_del(&stream->list); delete_ust_app_stream(sock, stream, app); } /* Wipe context */ - cds_lfht_for_each_entry(ua_chan->ctx->ht, &iter.iter, ua_ctx, node.node) { + cds_lfht_for_each_entry (ua_chan->ctx->ht, &iter.iter, ua_ctx, node.node) { cds_list_del(&ua_ctx->list); ret = lttng_ht_del(ua_chan->ctx, &iter); LTTNG_ASSERT(!ret); @@ -590,8 +591,7 @@ static void delete_ust_app_channel(int sock, } /* Wipe events */ - cds_lfht_for_each_entry(ua_chan->events->ht, &iter.iter, ua_event, - node.node) { + cds_lfht_for_each_entry (ua_chan->events->ht, &iter.iter, ua_event, node.node) { ret = lttng_ht_del(ua_chan->events, &iter); LTTNG_ASSERT(!ret); delete_ust_app_event(sock, ua_event, app); @@ -602,7 +602,7 @@ static void delete_ust_app_channel(int sock, if (locked_registry) { try { locked_registry->remove_channel(ua_chan->key, sock >= 0); - } catch (const std::exception &ex) { + } catch (const std::exception& ex) { DBG("Could not find channel for removal: %s", ex.what()); } } @@ -617,7 +617,7 @@ static void delete_ust_app_channel(int sock, } } - if (ua_chan->obj != NULL) { + if (ua_chan->obj != nullptr) { /* Remove channel from application UST object descriptor. */ iter.iter.node = &ua_chan->ust_objd_node.node; ret = lttng_ht_del(app->ust_objd, &iter); @@ -628,16 +628,20 @@ static void delete_ust_app_channel(int sock, if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app channel %s release failed. Application is dead: pid = %d, sock = %d", - ua_chan->name, app->pid, - app->sock); + ua_chan->name, + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app channel %s release failed. Communication time out: pid = %d, sock = %d", - ua_chan->name, app->pid, - app->sock); + ua_chan->name, + app->pid, + app->sock); } else { ERR("UST app channel %s release failed with ret %d: pid = %d, sock = %d", - ua_chan->name, ret, app->pid, - app->sock); + ua_chan->name, + ret, + app->pid, + app->sock); } } lttng_fd_put(LTTNG_FD_APPS, 1); @@ -686,11 +690,11 @@ int ust_app_release_object(struct ust_app *app, struct lttng_ust_abi_object_data * terminated concurrently). */ ssize_t ust_app_push_metadata(const lsu::registry_session::locked_ptr& locked_registry, - struct consumer_socket *socket, - int send_zero_data) + struct consumer_socket *socket, + int send_zero_data) { int ret; - char *metadata_str = NULL; + char *metadata_str = nullptr; size_t len, offset, new_metadata_len_sent; ssize_t ret_val; uint64_t metadata_key, metadata_version; @@ -715,7 +719,7 @@ ssize_t ust_app_push_metadata(const lsu::registry_session::locked_ptr& locked_re metadata_version = locked_registry->_metadata_version; if (len == 0) { DBG3("No metadata to push for metadata key %" PRIu64, - locked_registry->_metadata_key); + locked_registry->_metadata_key); ret_val = len; if (send_zero_data) { DBG("No metadata to push"); @@ -748,8 +752,8 @@ push_data: * daemon. Those push and pull schemes are performed on two * different bidirectionnal communication sockets. */ - ret = consumer_push_metadata(socket, metadata_key, - metadata_str, len, offset, metadata_version); + ret = consumer_push_metadata( + socket, metadata_key, metadata_str, len, offset, metadata_version); pthread_mutex_lock(&locked_registry->_lock); if (ret < 0) { /* @@ -788,8 +792,7 @@ push_data: * send. */ locked_registry->_metadata_len_sent = - std::max(locked_registry->_metadata_len_sent, - new_metadata_len_sent); + std::max(locked_registry->_metadata_len_sent, new_metadata_len_sent); } free(metadata_str); return len; @@ -826,7 +829,7 @@ error_push: * terminated concurrently). */ static int push_metadata(const lsu::registry_session::locked_ptr& locked_registry, - struct consumer_output *consumer) + struct consumer_output *consumer) { int ret_val; ssize_t ret; @@ -842,8 +845,7 @@ static int push_metadata(const lsu::registry_session::locked_ptr& locked_registr } /* Get consumer socket to use to push the metadata.*/ - socket = consumer_find_socket_by_bitness(locked_registry->abi.bits_per_long, - consumer); + socket = consumer_find_socket_by_bitness(locked_registry->abi.bits_per_long, consumer); if (!socket) { ret_val = -1; goto error; @@ -872,8 +874,9 @@ error: * * Return 0 on success else a negative value. */ -static int close_metadata(uint64_t metadata_key, unsigned int consumer_bitness, - struct consumer_output *consumer) +static int close_metadata(uint64_t metadata_key, + unsigned int consumer_bitness, + struct consumer_output *consumer) { int ret; struct consumer_socket *socket; @@ -882,8 +885,7 @@ static int close_metadata(uint64_t metadata_key, unsigned int consumer_bitness, LTTNG_ASSERT(consumer); /* Get consumer socket to use to push the metadata. */ - socket = consumer_find_socket_by_bitness(consumer_bitness, - consumer); + socket = consumer_find_socket_by_bitness(consumer_bitness, consumer); if (!socket) { ret = -1; goto end; @@ -898,11 +900,10 @@ end: return ret; } -static -void delete_ust_app_session_rcu(struct rcu_head *head) +static void delete_ust_app_session_rcu(struct rcu_head *head) { struct ust_app_session *ua_sess = - caa_container_of(head, struct ust_app_session, rcu_head); + lttng::utils::container_of(head, &ust_app_session::rcu_head); lttng_ht_destroy(ua_sess->channels); free(ua_sess); @@ -914,9 +915,7 @@ void delete_ust_app_session_rcu(struct rcu_head *head) * * The session list lock must be held by the caller. */ -static -void delete_ust_app_session(int sock, struct ust_app_session *ua_sess, - struct ust_app *app) +static void delete_ust_app_session(int sock, struct ust_app_session *ua_sess, struct ust_app *app) { int ret; struct lttng_ht_iter iter; @@ -937,8 +936,7 @@ void delete_ust_app_session(int sock, struct ust_app_session *ua_sess, (void) push_metadata(locked_registry, ua_sess->consumer); } - cds_lfht_for_each_entry(ua_sess->channels->ht, &iter.iter, ua_chan, - node.node) { + cds_lfht_for_each_entry (ua_sess->channels->ht, &iter.iter, ua_chan, node.node) { ret = lttng_ht_del(ua_sess->channels, &iter); LTTNG_ASSERT(!ret); delete_ust_app_channel(sock, ua_chan, app, locked_registry); @@ -985,13 +983,17 @@ void delete_ust_app_session(int sock, struct ust_app_session *ua_sess, if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app release session handle failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app release session handle failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app release session handle failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } } @@ -1012,8 +1014,7 @@ void delete_ust_app_session(int sock, struct ust_app_session *ua_sess, * Delete a traceable application structure from the global list. Never call * this function outside of a call_rcu call. */ -static -void delete_ust_app(struct ust_app *app) +static void delete_ust_app(struct ust_app *app) { int ret, sock; struct ust_app_session *ua_sess, *tmp_ua_sess; @@ -1031,8 +1032,7 @@ void delete_ust_app(struct ust_app *app) app->sock = -1; /* Wipe sessions */ - cds_list_for_each_entry_safe(ua_sess, tmp_ua_sess, &app->teardown_head, - teardown_node) { + cds_list_for_each_entry_safe (ua_sess, tmp_ua_sess, &app->teardown_head, teardown_node) { /* Free every object in the session and the session. */ rcu_read_lock(); delete_ust_app_session(sock, ua_sess, app); @@ -1042,12 +1042,13 @@ void delete_ust_app(struct ust_app *app) /* Remove the event notifier rules associated with this app. */ rcu_read_lock(); cds_lfht_for_each_entry (app->token_to_event_notifier_rule_ht->ht, - &iter.iter, event_notifier_rule, node.node) { + &iter.iter, + event_notifier_rule, + node.node) { ret = lttng_ht_del(app->token_to_event_notifier_rule_ht, &iter); LTTNG_ASSERT(!ret); - delete_ust_app_event_notifier_rule( - app->sock, event_notifier_rule, app); + delete_ust_app_event_notifier_rule(app->sock, event_notifier_rule, app); } rcu_read_unlock(); @@ -1065,12 +1066,11 @@ void delete_ust_app(struct ust_app *app) enum lttng_error_code ret_code; enum event_notifier_error_accounting_status status; - const int event_notifier_read_fd = lttng_pipe_get_readfd( - app->event_notifier_group.event_pipe); + const int event_notifier_read_fd = + lttng_pipe_get_readfd(app->event_notifier_group.event_pipe); ret_code = notification_thread_command_remove_tracer_event_source( - the_notification_thread_handle, - event_notifier_read_fd); + the_notification_thread_handle, event_notifier_read_fd); if (ret_code != LTTNG_OK) { ERR("Failed to remove application tracer event source from notification thread"); } @@ -1084,8 +1084,8 @@ void delete_ust_app(struct ust_app *app) free(app->event_notifier_group.object); } - event_notifier_write_fd_is_open = lttng_pipe_is_write_open( - app->event_notifier_group.event_pipe); + event_notifier_write_fd_is_open = + lttng_pipe_is_write_open(app->event_notifier_group.event_pipe); lttng_pipe_destroy(app->event_notifier_group.event_pipe); /* * Release the file descriptors reserved for the event notifier pipe. @@ -1122,13 +1122,11 @@ void delete_ust_app(struct ust_app *app) /* * URCU intermediate call to delete an UST app. */ -static -void delete_ust_app_rcu(struct rcu_head *head) +static void delete_ust_app_rcu(struct rcu_head *head) { struct lttng_ht_node_ulong *node = - caa_container_of(head, struct lttng_ht_node_ulong, head); - struct ust_app *app = - caa_container_of(node, struct ust_app, pid_n); + lttng::utils::container_of(head, <tng_ht_node_ulong::head); + struct ust_app *app = lttng::utils::container_of(node, &ust_app::pid_n); DBG3("Call RCU deleting app PID %d", app->pid); delete_ust_app(app); @@ -1140,8 +1138,7 @@ void delete_ust_app_rcu(struct rcu_head *head) * * The session list lock must be held by the caller. */ -static void destroy_app_session(struct ust_app *app, - struct ust_app_session *ua_sess) +static void destroy_app_session(struct ust_app *app, struct ust_app_session *ua_sess) { int ret; struct lttng_ht_iter iter; @@ -1166,14 +1163,13 @@ end: /* * Alloc new UST app session. */ -static -struct ust_app_session *alloc_ust_app_session(void) +static struct ust_app_session *alloc_ust_app_session() { struct ust_app_session *ua_sess; /* Init most of the default value by allocating and zeroing */ ua_sess = zmalloc(); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { PERROR("malloc"); goto error_free; } @@ -1181,27 +1177,26 @@ struct ust_app_session *alloc_ust_app_session(void) ua_sess->handle = -1; ua_sess->channels = lttng_ht_new(0, LTTNG_HT_TYPE_STRING); ua_sess->metadata_attr.type = LTTNG_UST_ABI_CHAN_METADATA; - pthread_mutex_init(&ua_sess->lock, NULL); + pthread_mutex_init(&ua_sess->lock, nullptr); return ua_sess; error_free: - return NULL; + return nullptr; } /* * Alloc new UST app channel. */ -static -struct ust_app_channel *alloc_ust_app_channel(const char *name, - struct ust_app_session *ua_sess, - struct lttng_ust_abi_channel_attr *attr) +static struct ust_app_channel *alloc_ust_app_channel(const char *name, + struct ust_app_session *ua_sess, + struct lttng_ust_abi_channel_attr *attr) { struct ust_app_channel *ua_chan; /* Init most of the default value by allocating and zeroing */ ua_chan = zmalloc(); - if (ua_chan == NULL) { + if (ua_chan == nullptr) { PERROR("malloc"); goto error; } @@ -1210,7 +1205,7 @@ struct ust_app_channel *alloc_ust_app_channel(const char *name, strncpy(ua_chan->name, name, sizeof(ua_chan->name)); ua_chan->name[sizeof(ua_chan->name) - 1] = '\0'; - ua_chan->enabled = 1; + ua_chan->enabled = true; ua_chan->handle = -1; ua_chan->session = ua_sess; ua_chan->key = get_next_channel_key(); @@ -1240,7 +1235,7 @@ struct ust_app_channel *alloc_ust_app_channel(const char *name, return ua_chan; error: - return NULL; + return nullptr; } /* @@ -1248,12 +1243,12 @@ error: * * Return newly allocated stream pointer or NULL on error. */ -struct ust_app_stream *ust_app_alloc_stream(void) +struct ust_app_stream *ust_app_alloc_stream() { - struct ust_app_stream *stream = NULL; + struct ust_app_stream *stream = nullptr; stream = zmalloc(); - if (stream == NULL) { + if (stream == nullptr) { PERROR("zmalloc ust app stream"); goto error; } @@ -1268,20 +1263,18 @@ error: /* * Alloc new UST app event. */ -static -struct ust_app_event *alloc_ust_app_event(char *name, - struct lttng_ust_abi_event *attr) +static struct ust_app_event *alloc_ust_app_event(char *name, struct lttng_ust_abi_event *attr) { struct ust_app_event *ua_event; /* Init most of the default value by allocating and zeroing */ ua_event = zmalloc(); - if (ua_event == NULL) { + if (ua_event == nullptr) { PERROR("Failed to allocate ust_app_event structure"); goto error; } - ua_event->enabled = 1; + ua_event->enabled = true; strncpy(ua_event->name, name, sizeof(ua_event->name)); ua_event->name[sizeof(ua_event->name) - 1] = '\0'; lttng_ht_node_init_str(&ua_event->node, ua_event->name); @@ -1296,52 +1289,49 @@ struct ust_app_event *alloc_ust_app_event(char *name, return ua_event; error: - return NULL; + return nullptr; } /* * Allocate a new UST app event notifier rule. */ -static struct ust_app_event_notifier_rule *alloc_ust_app_event_notifier_rule( - struct lttng_trigger *trigger) +static struct ust_app_event_notifier_rule * +alloc_ust_app_event_notifier_rule(struct lttng_trigger *trigger) { - enum lttng_event_rule_generate_exclusions_status - generate_exclusion_status; + enum lttng_event_rule_generate_exclusions_status generate_exclusion_status; enum lttng_condition_status cond_status; struct ust_app_event_notifier_rule *ua_event_notifier_rule; - struct lttng_condition *condition = NULL; - const struct lttng_event_rule *event_rule = NULL; + struct lttng_condition *condition = nullptr; + const struct lttng_event_rule *event_rule = nullptr; ua_event_notifier_rule = zmalloc(); - if (ua_event_notifier_rule == NULL) { + if (ua_event_notifier_rule == nullptr) { PERROR("Failed to allocate ust_app_event_notifier_rule structure"); goto error; } - ua_event_notifier_rule->enabled = 1; + ua_event_notifier_rule->enabled = true; ua_event_notifier_rule->token = lttng_trigger_get_tracer_token(trigger); - lttng_ht_node_init_u64(&ua_event_notifier_rule->node, - ua_event_notifier_rule->token); + lttng_ht_node_init_u64(&ua_event_notifier_rule->node, ua_event_notifier_rule->token); condition = lttng_trigger_get_condition(trigger); LTTNG_ASSERT(condition); LTTNG_ASSERT(lttng_condition_get_type(condition) == - LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES); + LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES); - cond_status = lttng_condition_event_rule_matches_get_rule( - condition, &event_rule); + cond_status = lttng_condition_event_rule_matches_get_rule(condition, &event_rule); LTTNG_ASSERT(cond_status == LTTNG_CONDITION_STATUS_OK); LTTNG_ASSERT(event_rule); ua_event_notifier_rule->error_counter_index = - lttng_condition_event_rule_matches_get_error_counter_index(condition); + lttng_condition_event_rule_matches_get_error_counter_index(condition); /* Acquire the event notifier's reference to the trigger. */ lttng_trigger_get(trigger); ua_event_notifier_rule->trigger = trigger; ua_event_notifier_rule->filter = lttng_event_rule_get_filter_bytecode(event_rule); generate_exclusion_status = lttng_event_rule_generate_exclusions( - event_rule, &ua_event_notifier_rule->exclusion); + event_rule, &ua_event_notifier_rule->exclusion); switch (generate_exclusion_status) { case LTTNG_EVENT_RULE_GENERATE_EXCLUSIONS_STATUS_OK: case LTTNG_EVENT_RULE_GENERATE_EXCLUSIONS_STATUS_NONE: @@ -1353,7 +1343,7 @@ static struct ust_app_event_notifier_rule *alloc_ust_app_event_notifier_rule( } DBG3("UST app event notifier rule allocated: token = %" PRIu64, - ua_event_notifier_rule->token); + ua_event_notifier_rule->token); return ua_event_notifier_rule; @@ -1361,19 +1351,18 @@ error_put_trigger: lttng_trigger_put(trigger); error: free(ua_event_notifier_rule); - return NULL; + return nullptr; } /* * Alloc new UST app context. */ -static -struct ust_app_ctx *alloc_ust_app_ctx(struct lttng_ust_context_attr *uctx) +static struct ust_app_ctx *alloc_ust_app_ctx(struct lttng_ust_context_attr *uctx) { struct ust_app_ctx *ua_ctx; ua_ctx = zmalloc(); - if (ua_ctx == NULL) { + if (ua_ctx == nullptr) { goto error; } @@ -1382,7 +1371,7 @@ struct ust_app_ctx *alloc_ust_app_ctx(struct lttng_ust_context_attr *uctx) if (uctx) { memcpy(&ua_ctx->ctx, uctx, sizeof(ua_ctx->ctx)); if (uctx->ctx == LTTNG_UST_ABI_CONTEXT_APP_CONTEXT) { - char *provider_name = NULL, *ctx_name = NULL; + char *provider_name = nullptr, *ctx_name = nullptr; provider_name = strdup(uctx->u.app_ctx.provider_name); ctx_name = strdup(uctx->u.app_ctx.ctx_name); @@ -1401,7 +1390,7 @@ struct ust_app_ctx *alloc_ust_app_ctx(struct lttng_ust_context_attr *uctx) return ua_ctx; error: free(ua_ctx); - return NULL; + return nullptr; } /* @@ -1409,20 +1398,21 @@ error: * * Return allocated filter or NULL on error. */ -static struct lttng_ust_abi_filter_bytecode *create_ust_filter_bytecode_from_bytecode( - const struct lttng_bytecode *orig_f) +static struct lttng_ust_abi_filter_bytecode * +create_ust_filter_bytecode_from_bytecode(const struct lttng_bytecode *orig_f) { - struct lttng_ust_abi_filter_bytecode *filter = NULL; + struct lttng_ust_abi_filter_bytecode *filter = nullptr; /* Copy filter bytecode. */ filter = zmalloc(sizeof(*filter) + orig_f->len); if (!filter) { - PERROR("Failed to allocate lttng_ust_filter_bytecode: bytecode len = %" PRIu32 " bytes", orig_f->len); + PERROR("Failed to allocate lttng_ust_filter_bytecode: bytecode len = %" PRIu32 + " bytes", + orig_f->len); goto error; } - LTTNG_ASSERT(sizeof(struct lttng_bytecode) == - sizeof(struct lttng_ust_abi_filter_bytecode)); + LTTNG_ASSERT(sizeof(struct lttng_bytecode) == sizeof(struct lttng_ust_abi_filter_bytecode)); memcpy(filter, orig_f, sizeof(*filter) + orig_f->len); error: return filter; @@ -1436,17 +1426,19 @@ error: static struct lttng_ust_abi_capture_bytecode * create_ust_capture_bytecode_from_bytecode(const struct lttng_bytecode *orig_f) { - struct lttng_ust_abi_capture_bytecode *capture = NULL; + struct lttng_ust_abi_capture_bytecode *capture = nullptr; /* Copy capture bytecode. */ capture = zmalloc(sizeof(*capture) + orig_f->len); if (!capture) { - PERROR("Failed to allocate lttng_ust_abi_capture_bytecode: bytecode len = %" PRIu32 " bytes", orig_f->len); + PERROR("Failed to allocate lttng_ust_abi_capture_bytecode: bytecode len = %" PRIu32 + " bytes", + orig_f->len); goto error; } LTTNG_ASSERT(sizeof(struct lttng_bytecode) == - sizeof(struct lttng_ust_abi_capture_bytecode)); + sizeof(struct lttng_ust_abi_capture_bytecode)); memcpy(capture, orig_f, sizeof(*capture) + orig_f->len); error: return capture; @@ -1463,17 +1455,17 @@ struct ust_app *ust_app_find_by_sock(int sock) ASSERT_RCU_READ_LOCKED(); - lttng_ht_lookup(ust_app_ht_by_sock, (void *)((unsigned long) sock), &iter); + lttng_ht_lookup(ust_app_ht_by_sock, (void *) ((unsigned long) sock), &iter); node = lttng_ht_iter_get_node_ulong(&iter); - if (node == NULL) { + if (node == nullptr) { DBG2("UST app find by sock %d not found", sock); goto error; } - return caa_container_of(node, struct ust_app, sock_n); + return lttng::utils::container_of(node, &ust_app::sock_n); error: - return NULL; + return nullptr; } /* @@ -1487,18 +1479,17 @@ static struct ust_app *find_app_by_notify_sock(int sock) ASSERT_RCU_READ_LOCKED(); - lttng_ht_lookup(ust_app_ht_by_notify_sock, (void *)((unsigned long) sock), - &iter); + lttng_ht_lookup(ust_app_ht_by_notify_sock, (void *) ((unsigned long) sock), &iter); node = lttng_ht_iter_get_node_ulong(&iter); - if (node == NULL) { + if (node == nullptr) { DBG2("UST app find by notify sock %d not found", sock); goto error; } - return caa_container_of(node, struct ust_app, notify_sock_n); + return lttng::utils::container_of(node, &ust_app::notify_sock_n); error: - return NULL; + return nullptr; } /* @@ -1508,13 +1499,14 @@ error: * Return an ust_app_event object or NULL on error. */ static struct ust_app_event *find_ust_app_event(struct lttng_ht *ht, - const char *name, const struct lttng_bytecode *filter, - int loglevel_value, - const struct lttng_event_exclusion *exclusion) + const char *name, + const struct lttng_bytecode *filter, + int loglevel_value, + const struct lttng_event_exclusion *exclusion) { struct lttng_ht_iter iter; struct lttng_ht_node_str *node; - struct ust_app_event *event = NULL; + struct ust_app_event *event = nullptr; struct ust_app_ht_key key; LTTNG_ASSERT(name); @@ -1528,14 +1520,17 @@ static struct ust_app_event *find_ust_app_event(struct lttng_ht *ht, key.exclusion = exclusion; /* Lookup using the event name as hash and a custom match fct. */ - cds_lfht_lookup(ht->ht, ht->hash_fct((void *) name, lttng_ht_seed), - ht_match_ust_app_event, &key, &iter.iter); + cds_lfht_lookup(ht->ht, + ht->hash_fct((void *) name, lttng_ht_seed), + ht_match_ust_app_event, + &key, + &iter.iter); node = lttng_ht_iter_get_node_str(&iter); - if (node == NULL) { + if (node == nullptr) { goto end; } - event = caa_container_of(node, struct ust_app_event, node); + event = lttng::utils::container_of(node, &ust_app_event::node); end: return event; @@ -1547,26 +1542,24 @@ end: * Must be called with the RCU read lock held. * Return an ust_app_event_notifier_rule object or NULL on error. */ -static struct ust_app_event_notifier_rule *find_ust_app_event_notifier_rule( - struct lttng_ht *ht, uint64_t token) +static struct ust_app_event_notifier_rule *find_ust_app_event_notifier_rule(struct lttng_ht *ht, + uint64_t token) { struct lttng_ht_iter iter; struct lttng_ht_node_u64 *node; - struct ust_app_event_notifier_rule *event_notifier_rule = NULL; + struct ust_app_event_notifier_rule *event_notifier_rule = nullptr; LTTNG_ASSERT(ht); ASSERT_RCU_READ_LOCKED(); lttng_ht_lookup(ht, &token, &iter); node = lttng_ht_iter_get_node_u64(&iter); - if (node == NULL) { - DBG2("UST app event notifier rule token not found: token = %" PRIu64, - token); + if (node == nullptr) { + DBG2("UST app event notifier rule token not found: token = %" PRIu64, token); goto end; } - event_notifier_rule = caa_container_of( - node, struct ust_app_event_notifier_rule, node); + event_notifier_rule = lttng::utils::container_of(node, &ust_app_event_notifier_rule::node); end: return event_notifier_rule; } @@ -1576,30 +1569,33 @@ end: * * Called with UST app session lock held. */ -static -int create_ust_channel_context(struct ust_app_channel *ua_chan, - struct ust_app_ctx *ua_ctx, struct ust_app *app) +static int create_ust_channel_context(struct ust_app_channel *ua_chan, + struct ust_app_ctx *ua_ctx, + struct ust_app *app) { int ret; health_code_update(); pthread_mutex_lock(&app->sock_lock); - ret = lttng_ust_ctl_add_context(app->sock, &ua_ctx->ctx, - ua_chan->obj, &ua_ctx->obj); + ret = lttng_ust_ctl_add_context(app->sock, &ua_ctx->ctx, ua_chan->obj, &ua_ctx->obj); pthread_mutex_unlock(&app->sock_lock); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app create channel context failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app create channel context failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app create channel context failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } goto error; } @@ -1607,7 +1603,8 @@ int create_ust_channel_context(struct ust_app_channel *ua_chan, ua_ctx->handle = ua_ctx->obj->handle; DBG2("UST app context handle %d created successfully for channel %s", - ua_ctx->handle, ua_chan->name); + ua_ctx->handle, + ua_chan->name); error: health_code_update(); @@ -1618,11 +1615,11 @@ error: * Set the filter on the tracer. */ static int set_ust_object_filter(struct ust_app *app, - const struct lttng_bytecode *bytecode, - struct lttng_ust_abi_object_data *ust_object) + const struct lttng_bytecode *bytecode, + struct lttng_ust_abi_object_data *ust_object) { int ret; - struct lttng_ust_abi_filter_bytecode *ust_bytecode = NULL; + struct lttng_ust_abi_filter_bytecode *ust_bytecode = nullptr; health_code_update(); @@ -1632,21 +1629,25 @@ static int set_ust_object_filter(struct ust_app *app, goto error; } pthread_mutex_lock(&app->sock_lock); - ret = lttng_ust_ctl_set_filter(app->sock, ust_bytecode, - ust_object); + ret = lttng_ust_ctl_set_filter(app->sock, ust_bytecode, ust_object); pthread_mutex_unlock(&app->sock_lock); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app set filter failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app set filter failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app set filter failed with ret %d: pid = %d, sock = %d, object = %p", - ret, app->pid, app->sock, ust_object); + ret, + app->pid, + app->sock, + ust_object); } goto error; } @@ -1665,12 +1666,12 @@ error: * the captured payloads. */ static int set_ust_capture(struct ust_app *app, - const struct lttng_bytecode *bytecode, - unsigned int capture_seqnum, - struct lttng_ust_abi_object_data *ust_object) + const struct lttng_bytecode *bytecode, + unsigned int capture_seqnum, + struct lttng_ust_abi_object_data *ust_object) { int ret; - struct lttng_ust_abi_capture_bytecode *ust_bytecode = NULL; + struct lttng_ust_abi_capture_bytecode *ust_bytecode = nullptr; health_code_update(); @@ -1686,22 +1687,24 @@ static int set_ust_capture(struct ust_app *app, ust_bytecode->seqnum = capture_seqnum; pthread_mutex_lock(&app->sock_lock); - ret = lttng_ust_ctl_set_capture(app->sock, ust_bytecode, - ust_object); + ret = lttng_ust_ctl_set_capture(app->sock, ust_bytecode, ust_object); pthread_mutex_unlock(&app->sock_lock); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app set capture failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; DBG3("UST app set capture failed. Communication timeout: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app event set capture failed with ret %d: pid = %d, sock = %d", - ret, app->pid, - app->sock); + ret, + app->pid, + app->sock); } goto error; @@ -1715,11 +1718,10 @@ error: return ret; } -static -struct lttng_ust_abi_event_exclusion *create_ust_exclusion_from_exclusion( - const struct lttng_event_exclusion *exclusion) +static struct lttng_ust_abi_event_exclusion * +create_ust_exclusion_from_exclusion(const struct lttng_event_exclusion *exclusion) { - struct lttng_ust_abi_event_exclusion *ust_exclusion = NULL; + struct lttng_ust_abi_event_exclusion *ust_exclusion = nullptr; size_t exclusion_alloc_size = sizeof(struct lttng_ust_abi_event_exclusion) + LTTNG_UST_ABI_SYM_NAME_LEN * exclusion->count; @@ -1730,7 +1732,7 @@ struct lttng_ust_abi_event_exclusion *create_ust_exclusion_from_exclusion( } LTTNG_ASSERT(sizeof(struct lttng_event_exclusion) == - sizeof(struct lttng_ust_abi_event_exclusion)); + sizeof(struct lttng_ust_abi_event_exclusion)); memcpy(ust_exclusion, exclusion, exclusion_alloc_size); end: return ust_exclusion; @@ -1740,18 +1742,17 @@ end: * Set event exclusions on the tracer. */ static int set_ust_object_exclusions(struct ust_app *app, - const struct lttng_event_exclusion *exclusions, - struct lttng_ust_abi_object_data *ust_object) + const struct lttng_event_exclusion *exclusions, + struct lttng_ust_abi_object_data *ust_object) { int ret; - struct lttng_ust_abi_event_exclusion *ust_exclusions = NULL; + struct lttng_ust_abi_event_exclusion *ust_exclusions = nullptr; LTTNG_ASSERT(exclusions && exclusions->count > 0); health_code_update(); - ust_exclusions = create_ust_exclusion_from_exclusion( - exclusions); + ust_exclusions = create_ust_exclusion_from_exclusion(exclusions); if (!ust_exclusions) { ret = -LTTNG_ERR_NOMEM; goto error; @@ -1763,14 +1764,19 @@ static int set_ust_object_exclusions(struct ust_app *app, if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app event exclusion failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app event exclusion failed. Communication time out(pid: %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app event exclusions failed with ret %d: pid = %d, sock = %d, object = %p", - ret, app->pid, app->sock, ust_object); + ret, + app->pid, + app->sock, + ust_object); } goto error; } @@ -1786,8 +1792,7 @@ error: /* * Disable the specified event on to UST tracer for the UST session. */ -static int disable_ust_object(struct ust_app *app, - struct lttng_ust_abi_object_data *object) +static int disable_ust_object(struct ust_app *app, struct lttng_ust_abi_object_data *object) { int ret; @@ -1800,20 +1805,24 @@ static int disable_ust_object(struct ust_app *app, if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app disable object failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app disable object failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app disable object failed with ret %d: pid = %d, sock = %d, object = %p", - ret, app->pid, app->sock, object); + ret, + app->pid, + app->sock, + object); } goto error; } - DBG2("UST app object %p disabled successfully for app: pid = %d", - object, app->pid); + DBG2("UST app object %p disabled successfully for app: pid = %d", object, app->pid); error: health_code_update(); @@ -1824,7 +1833,8 @@ error: * Disable the specified channel on to UST tracer for the UST session. */ static int disable_ust_channel(struct ust_app *app, - struct ust_app_session *ua_sess, struct ust_app_channel *ua_chan) + struct ust_app_session *ua_sess, + struct ust_app_channel *ua_chan) { int ret; @@ -1837,21 +1847,25 @@ static int disable_ust_channel(struct ust_app *app, if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app disable channel failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app disable channel failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app channel %s disable failed, session handle %d, with ret %d: pid = %d, sock = %d", - ua_chan->name, ua_sess->handle, ret, - app->pid, app->sock); + ua_chan->name, + ua_sess->handle, + ret, + app->pid, + app->sock); } goto error; } - DBG2("UST app channel %s disabled successfully for app: pid = %d", - ua_chan->name, app->pid); + DBG2("UST app channel %s disabled successfully for app: pid = %d", ua_chan->name, app->pid); error: health_code_update(); @@ -1862,7 +1876,8 @@ error: * Enable the specified channel on to UST tracer for the UST session. */ static int enable_ust_channel(struct ust_app *app, - struct ust_app_session *ua_sess, struct ust_app_channel *ua_chan) + struct ust_app_session *ua_sess, + struct ust_app_channel *ua_chan) { int ret; @@ -1875,23 +1890,29 @@ static int enable_ust_channel(struct ust_app *app, if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app channel %s enable failed. Application is dead: pid = %d, sock = %d", - ua_chan->name, app->pid, app->sock); + ua_chan->name, + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app channel %s enable failed. Communication time out: pid = %d, sock = %d", - ua_chan->name, app->pid, app->sock); + ua_chan->name, + app->pid, + app->sock); } else { ERR("UST app channel %s enable failed, session handle %d, with ret %d: pid = %d, sock = %d", - ua_chan->name, ua_sess->handle, ret, - app->pid, app->sock); + ua_chan->name, + ua_sess->handle, + ret, + app->pid, + app->sock); } goto error; } - ua_chan->enabled = 1; + ua_chan->enabled = true; - DBG2("UST app channel %s enabled successfully for app: pid = %d", - ua_chan->name, app->pid); + DBG2("UST app channel %s enabled successfully for app: pid = %d", ua_chan->name, app->pid); error: health_code_update(); @@ -1901,8 +1922,7 @@ error: /* * Enable the specified event on to UST tracer for the UST session. */ -static int enable_ust_object( - struct ust_app *app, struct lttng_ust_abi_object_data *ust_object) +static int enable_ust_object(struct ust_app *app, struct lttng_ust_abi_object_data *ust_object) { int ret; @@ -1915,20 +1935,24 @@ static int enable_ust_object( if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app enable object failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app enable object failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app enable object failed with ret %d: pid = %d, sock = %d, object = %p", - ret, app->pid, app->sock, ust_object); + ret, + app->pid, + app->sock, + ust_object); } goto error; } - DBG2("UST app object %p enabled successfully for app: pid = %d", - ust_object, app->pid); + DBG2("UST app object %p enabled successfully for app: pid = %d", ust_object, app->pid); error: health_code_update(); @@ -1941,7 +1965,8 @@ error: * Return 0 on success. On error, a negative value is returned. */ static int send_channel_pid_to_ust(struct ust_app *app, - struct ust_app_session *ua_sess, struct ust_app_channel *ua_chan) + struct ust_app_session *ua_sess, + struct ust_app_channel *ua_chan) { int ret; struct ust_app_stream *stream, *stmp; @@ -1952,18 +1977,20 @@ static int send_channel_pid_to_ust(struct ust_app *app, health_code_update(); - DBG("UST app sending channel %s to UST app sock %d", ua_chan->name, - app->sock); + DBG("UST app sending channel %s to UST app sock %d", ua_chan->name, app->sock); /* Send channel to the application. */ ret = ust_consumer_send_channel_to_ust(app, ua_sess, ua_chan); if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { - ret = -ENOTCONN; /* Caused by app exiting. */ + ret = -ENOTCONN; /* Caused by app exiting. */ goto error; } else if (ret == -EAGAIN) { /* Caused by timeout. */ - WARN("Communication with application %d timed out on send_channel for channel \"%s\" of session \"%" PRIu64 "\".", - app->pid, ua_chan->name, ua_sess->tracing_id); + WARN("Communication with application %d timed out on send_channel for channel \"%s\" of session \"%" PRIu64 + "\".", + app->pid, + ua_chan->name, + ua_sess->tracing_id); /* Treat this the same way as an application that is exiting. */ ret = -ENOTCONN; goto error; @@ -1974,16 +2001,19 @@ static int send_channel_pid_to_ust(struct ust_app *app, health_code_update(); /* Send all streams to application. */ - cds_list_for_each_entry_safe(stream, stmp, &ua_chan->streams.head, list) { + cds_list_for_each_entry_safe (stream, stmp, &ua_chan->streams.head, list) { ret = ust_consumer_send_stream_to_ust(app, ua_chan, stream); if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = -ENOTCONN; /* Caused by app exiting. */ goto error; } else if (ret == -EAGAIN) { /* Caused by timeout. */ - WARN("Communication with application %d timed out on send_stream for stream \"%s\" of channel \"%s\" of session \"%" PRIu64 "\".", - app->pid, stream->name, ua_chan->name, - ua_sess->tracing_id); + WARN("Communication with application %d timed out on send_stream for stream \"%s\" of channel \"%s\" of session \"%" PRIu64 + "\".", + app->pid, + stream->name, + ua_chan->name, + ua_sess->tracing_id); /* * Treat this the same way as an application that is * exiting. @@ -2007,9 +2037,9 @@ error: * * Should be called with session mutex held. */ -static -int create_ust_event(struct ust_app *app, - struct ust_app_channel *ua_chan, struct ust_app_event *ua_event) +static int create_ust_event(struct ust_app *app, + struct ust_app_channel *ua_chan, + struct ust_app_event *ua_event) { int ret = 0; @@ -2017,22 +2047,25 @@ int create_ust_event(struct ust_app *app, /* Create UST event on tracer */ pthread_mutex_lock(&app->sock_lock); - ret = lttng_ust_ctl_create_event(app->sock, &ua_event->attr, ua_chan->obj, - &ua_event->obj); + ret = lttng_ust_ctl_create_event(app->sock, &ua_event->attr, ua_chan->obj, &ua_event->obj); pthread_mutex_unlock(&app->sock_lock); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app create event failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app create event failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app create event '%s' failed with ret %d: pid = %d, sock = %d", - ua_event->attr.name, ret, app->pid, - app->sock); + ua_event->attr.name, + ret, + app->pid, + app->sock); } goto error; } @@ -2040,7 +2073,9 @@ int create_ust_event(struct ust_app *app, ua_event->handle = ua_event->obj->handle; DBG2("UST app event %s created successfully for pid:%d object = %p", - ua_event->attr.name, app->pid, ua_event->obj); + ua_event->attr.name, + app->pid, + ua_event->obj); health_code_update(); @@ -2093,16 +2128,15 @@ error: return ret; } -static int init_ust_event_notifier_from_event_rule( - const struct lttng_event_rule *rule, - struct lttng_ust_abi_event_notifier *event_notifier) +static int +init_ust_event_notifier_from_event_rule(const struct lttng_event_rule *rule, + struct lttng_ust_abi_event_notifier *event_notifier) { enum lttng_event_rule_status status; enum lttng_ust_abi_loglevel_type ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_ALL; int loglevel = -1, ret = 0; const char *pattern; - memset(event_notifier, 0, sizeof(*event_notifier)); if (lttng_event_rule_targets_agent_domain(rule)) { @@ -2112,15 +2146,14 @@ static int init_ust_event_notifier_from_event_rule( * attached later on. * Set the default values for the agent event. */ - pattern = event_get_default_agent_ust_name( - lttng_event_rule_get_domain_type(rule)); + pattern = event_get_default_agent_ust_name(lttng_event_rule_get_domain_type(rule)); loglevel = 0; ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_ALL; } else { const struct lttng_log_level_rule *log_level_rule; LTTNG_ASSERT(lttng_event_rule_get_type(rule) == - LTTNG_EVENT_RULE_TYPE_USER_TRACEPOINT); + LTTNG_EVENT_RULE_TYPE_USER_TRACEPOINT); status = lttng_event_rule_user_tracepoint_get_name_pattern(rule, &pattern); if (status != LTTNG_EVENT_RULE_STATUS_OK) { @@ -2128,8 +2161,7 @@ static int init_ust_event_notifier_from_event_rule( abort(); } - status = lttng_event_rule_user_tracepoint_get_log_level_rule( - rule, &log_level_rule); + status = lttng_event_rule_user_tracepoint_get_log_level_rule(rule, &log_level_rule); if (status == LTTNG_EVENT_RULE_STATUS_UNSET) { ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_ALL; } else if (status == LTTNG_EVENT_RULE_STATUS_OK) { @@ -2138,13 +2170,13 @@ static int init_ust_event_notifier_from_event_rule( switch (lttng_log_level_rule_get_type(log_level_rule)) { case LTTNG_LOG_LEVEL_RULE_TYPE_EXACTLY: ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_SINGLE; - llr_status = lttng_log_level_rule_exactly_get_level( - log_level_rule, &loglevel); + llr_status = lttng_log_level_rule_exactly_get_level(log_level_rule, + &loglevel); break; case LTTNG_LOG_LEVEL_RULE_TYPE_AT_LEAST_AS_SEVERE_AS: ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_RANGE; llr_status = lttng_log_level_rule_at_least_as_severe_as_get_level( - log_level_rule, &loglevel); + log_level_rule, &loglevel); break; default: abort(); @@ -2158,11 +2190,10 @@ static int init_ust_event_notifier_from_event_rule( } event_notifier->event.instrumentation = LTTNG_UST_ABI_TRACEPOINT; - ret = lttng_strncpy(event_notifier->event.name, pattern, - sizeof(event_notifier->event.name)); + ret = lttng_strncpy( + event_notifier->event.name, pattern, sizeof(event_notifier->event.name)); if (ret) { - ERR("Failed to copy event rule pattern to notifier: pattern = '%s' ", - pattern); + ERR("Failed to copy event rule pattern to notifier: pattern = '%s' ", pattern); goto end; } @@ -2177,13 +2208,13 @@ end: * given application. */ static int create_ust_event_notifier(struct ust_app *app, - struct ust_app_event_notifier_rule *ua_event_notifier_rule) + struct ust_app_event_notifier_rule *ua_event_notifier_rule) { int ret = 0; enum lttng_condition_status condition_status; - const struct lttng_condition *condition = NULL; + const struct lttng_condition *condition = nullptr; struct lttng_ust_abi_event_notifier event_notifier; - const struct lttng_event_rule *event_rule = NULL; + const struct lttng_event_rule *event_rule = nullptr; unsigned int capture_bytecode_count = 0, i; enum lttng_condition_status cond_status; enum lttng_event_rule_type event_rule_type; @@ -2191,25 +2222,21 @@ static int create_ust_event_notifier(struct ust_app *app, health_code_update(); LTTNG_ASSERT(app->event_notifier_group.object); - condition = lttng_trigger_get_const_condition( - ua_event_notifier_rule->trigger); + condition = lttng_trigger_get_const_condition(ua_event_notifier_rule->trigger); LTTNG_ASSERT(condition); LTTNG_ASSERT(lttng_condition_get_type(condition) == - LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES); + LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES); - condition_status = lttng_condition_event_rule_matches_get_rule( - condition, &event_rule); + condition_status = lttng_condition_event_rule_matches_get_rule(condition, &event_rule); LTTNG_ASSERT(condition_status == LTTNG_CONDITION_STATUS_OK); LTTNG_ASSERT(event_rule); event_rule_type = lttng_event_rule_get_type(event_rule); LTTNG_ASSERT(event_rule_type == LTTNG_EVENT_RULE_TYPE_USER_TRACEPOINT || - event_rule_type == LTTNG_EVENT_RULE_TYPE_JUL_LOGGING || - event_rule_type == - LTTNG_EVENT_RULE_TYPE_LOG4J_LOGGING || - event_rule_type == - LTTNG_EVENT_RULE_TYPE_PYTHON_LOGGING); + event_rule_type == LTTNG_EVENT_RULE_TYPE_JUL_LOGGING || + event_rule_type == LTTNG_EVENT_RULE_TYPE_LOG4J_LOGGING || + event_rule_type == LTTNG_EVENT_RULE_TYPE_PYTHON_LOGGING); init_ust_event_notifier_from_event_rule(event_rule, &event_notifier); event_notifier.event.token = ua_event_notifier_rule->token; @@ -2217,23 +2244,28 @@ static int create_ust_event_notifier(struct ust_app *app, /* Create UST event notifier against the tracer. */ pthread_mutex_lock(&app->sock_lock); - ret = lttng_ust_ctl_create_event_notifier(app->sock, &event_notifier, - app->event_notifier_group.object, - &ua_event_notifier_rule->obj); + ret = lttng_ust_ctl_create_event_notifier(app->sock, + &event_notifier, + app->event_notifier_group.object, + &ua_event_notifier_rule->obj); pthread_mutex_unlock(&app->sock_lock); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app create event notifier failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app create event notifier failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app create event notifier '%s' failed with ret %d: pid = %d, sock = %d", - event_notifier.event.name, ret, app->pid, - app->sock); + event_notifier.event.name, + ret, + app->pid, + app->sock); } goto error; } @@ -2241,15 +2273,17 @@ static int create_ust_event_notifier(struct ust_app *app, ua_event_notifier_rule->handle = ua_event_notifier_rule->obj->handle; DBG2("UST app event notifier %s created successfully: app = '%s': pid = %d, object = %p", - event_notifier.event.name, app->name, app->pid, - ua_event_notifier_rule->obj); + event_notifier.event.name, + app->name, + app->pid, + ua_event_notifier_rule->obj); health_code_update(); /* Set filter if one is present. */ if (ua_event_notifier_rule->filter) { - ret = set_ust_object_filter(app, ua_event_notifier_rule->filter, - ua_event_notifier_rule->obj); + ret = set_ust_object_filter( + app, ua_event_notifier_rule->filter, ua_event_notifier_rule->obj); if (ret < 0) { goto error; } @@ -2257,9 +2291,8 @@ static int create_ust_event_notifier(struct ust_app *app, /* Set exclusions for the event. */ if (ua_event_notifier_rule->exclusion) { - ret = set_ust_object_exclusions(app, - ua_event_notifier_rule->exclusion, - ua_event_notifier_rule->obj); + ret = set_ust_object_exclusions( + app, ua_event_notifier_rule->exclusion, ua_event_notifier_rule->obj); if (ret < 0) { goto error; } @@ -2267,16 +2300,15 @@ static int create_ust_event_notifier(struct ust_app *app, /* Set the capture bytecodes. */ cond_status = lttng_condition_event_rule_matches_get_capture_descriptor_count( - condition, &capture_bytecode_count); + condition, &capture_bytecode_count); LTTNG_ASSERT(cond_status == LTTNG_CONDITION_STATUS_OK); for (i = 0; i < capture_bytecode_count; i++) { const struct lttng_bytecode *capture_bytecode = - lttng_condition_event_rule_matches_get_capture_bytecode_at_index( - condition, i); + lttng_condition_event_rule_matches_get_capture_bytecode_at_index(condition, + i); - ret = set_ust_capture(app, capture_bytecode, i, - ua_event_notifier_rule->obj); + ret = set_ust_capture(app, capture_bytecode, i, ua_event_notifier_rule->obj); if (ret < 0) { goto error; } @@ -2318,8 +2350,7 @@ error: /* * Copy data between an UST app event and a LTT event. */ -static void shadow_copy_event(struct ust_app_event *ua_event, - struct ltt_ust_event *uevent) +static void shadow_copy_event(struct ust_app_event *ua_event, struct ltt_ust_event *uevent) { size_t exclusion_alloc_size; @@ -2340,13 +2371,12 @@ static void shadow_copy_event(struct ust_app_event *ua_event, /* Copy exclusion data */ if (uevent->exclusion) { exclusion_alloc_size = sizeof(struct lttng_event_exclusion) + - LTTNG_UST_ABI_SYM_NAME_LEN * uevent->exclusion->count; + LTTNG_UST_ABI_SYM_NAME_LEN * uevent->exclusion->count; ua_event->exclusion = zmalloc(exclusion_alloc_size); - if (ua_event->exclusion == NULL) { + if (ua_event->exclusion == nullptr) { PERROR("malloc"); } else { - memcpy(ua_event->exclusion, uevent->exclusion, - exclusion_alloc_size); + memcpy(ua_event->exclusion, uevent->exclusion, exclusion_alloc_size); } } } @@ -2354,8 +2384,7 @@ static void shadow_copy_event(struct ust_app_event *ua_event, /* * Copy data between an UST app channel and a LTT channel. */ -static void shadow_copy_channel(struct ust_app_channel *ua_chan, - struct ltt_ust_channel *uchan) +static void shadow_copy_channel(struct ust_app_channel *ua_chan, struct ltt_ust_channel *uchan) { DBG2("UST app shadow copy of channel %s started", ua_chan->name); @@ -2390,7 +2419,8 @@ static void shadow_copy_channel(struct ust_app_channel *ua_chan, * Copy data between a UST app session and a regular LTT session. */ static void shadow_copy_session(struct ust_app_session *ua_sess, - struct ltt_ust_session *usess, struct ust_app *app) + struct ltt_ust_session *usess, + struct ust_app *app) { struct tm *timeinfo; char datetime[16]; @@ -2417,20 +2447,23 @@ static void shadow_copy_session(struct ust_app_session *ua_sess, ua_sess->output_traces = usess->output_traces; ua_sess->live_timer_interval = usess->live_timer_interval; - copy_channel_attr_to_ustctl(&ua_sess->metadata_attr, - &usess->metadata_attr); + copy_channel_attr_to_ustctl(&ua_sess->metadata_attr, &usess->metadata_attr); switch (ua_sess->buffer_type) { case LTTNG_BUFFER_PER_PID: - ret = snprintf(ua_sess->path, sizeof(ua_sess->path), - DEFAULT_UST_TRACE_PID_PATH "/%s-%d-%s", app->name, app->pid, - datetime); + ret = snprintf(ua_sess->path, + sizeof(ua_sess->path), + DEFAULT_UST_TRACE_PID_PATH "/%s-%d-%s", + app->name, + app->pid, + datetime); break; case LTTNG_BUFFER_PER_UID: - ret = snprintf(ua_sess->path, sizeof(ua_sess->path), - DEFAULT_UST_TRACE_UID_PATH, - lttng_credentials_get_uid(&ua_sess->real_credentials), - app->abi.bits_per_long); + ret = snprintf(ua_sess->path, + sizeof(ua_sess->path), + DEFAULT_UST_TRACE_UID_PATH, + lttng_credentials_get_uid(&ua_sess->real_credentials), + app->abi.bits_per_long); break; default: abort(); @@ -2442,23 +2475,26 @@ static void shadow_copy_session(struct ust_app_session *ua_sess, goto error; } - strncpy(ua_sess->root_shm_path, usess->root_shm_path, - sizeof(ua_sess->root_shm_path)); + strncpy(ua_sess->root_shm_path, usess->root_shm_path, sizeof(ua_sess->root_shm_path)); ua_sess->root_shm_path[sizeof(ua_sess->root_shm_path) - 1] = '\0'; - strncpy(ua_sess->shm_path, usess->shm_path, - sizeof(ua_sess->shm_path)); + strncpy(ua_sess->shm_path, usess->shm_path, sizeof(ua_sess->shm_path)); ua_sess->shm_path[sizeof(ua_sess->shm_path) - 1] = '\0'; if (ua_sess->shm_path[0]) { switch (ua_sess->buffer_type) { case LTTNG_BUFFER_PER_PID: - ret = snprintf(tmp_shm_path, sizeof(tmp_shm_path), - "/" DEFAULT_UST_TRACE_PID_PATH "/%s-%d-%s", - app->name, app->pid, datetime); + ret = snprintf(tmp_shm_path, + sizeof(tmp_shm_path), + "/" DEFAULT_UST_TRACE_PID_PATH "/%s-%d-%s", + app->name, + app->pid, + datetime); break; case LTTNG_BUFFER_PER_UID: - ret = snprintf(tmp_shm_path, sizeof(tmp_shm_path), - "/" DEFAULT_UST_TRACE_UID_PATH, - app->uid, app->abi.bits_per_long); + ret = snprintf(tmp_shm_path, + sizeof(tmp_shm_path), + "/" DEFAULT_UST_TRACE_UID_PATH, + app->uid, + app->abi.bits_per_long); break; default: abort(); @@ -2469,7 +2505,8 @@ static void shadow_copy_session(struct ust_app_session *ua_sess, abort(); goto error; } - strncat(ua_sess->shm_path, tmp_shm_path, + strncat(ua_sess->shm_path, + tmp_shm_path, sizeof(ua_sess->shm_path) - strlen(ua_sess->shm_path) - 1); ua_sess->shm_path[sizeof(ua_sess->shm_path) - 1] = '\0'; } @@ -2482,9 +2519,9 @@ error: /* * Lookup sesison wrapper. */ -static -void __lookup_session_by_app(const struct ltt_ust_session *usess, - struct ust_app *app, struct lttng_ht_iter *iter) +static void __lookup_session_by_app(const struct ltt_ust_session *usess, + struct ust_app *app, + struct lttng_ht_iter *iter) { /* Get right UST app session from app */ lttng_ht_lookup(app->sessions, &usess->id, iter); @@ -2494,22 +2531,22 @@ void __lookup_session_by_app(const struct ltt_ust_session *usess, * Return ust app session from the app session hashtable using the UST session * id. */ -static struct ust_app_session *lookup_session_by_app( - const struct ltt_ust_session *usess, struct ust_app *app) +static struct ust_app_session *lookup_session_by_app(const struct ltt_ust_session *usess, + struct ust_app *app) { struct lttng_ht_iter iter; struct lttng_ht_node_u64 *node; __lookup_session_by_app(usess, app, &iter); node = lttng_ht_iter_get_node_u64(&iter); - if (node == NULL) { + if (node == nullptr) { goto error; } - return caa_container_of(node, struct ust_app_session, node); + return lttng::utils::container_of(node, &ust_app_session::node); error: - return NULL; + return nullptr; } /* @@ -2520,7 +2557,8 @@ error: * Return 0 on success or else a negative value. */ static int setup_buffer_reg_pid(struct ust_app_session *ua_sess, - struct ust_app *app, struct buffer_reg_pid **regp) + struct ust_app *app, + struct buffer_reg_pid **regp) { int ret = 0; struct buffer_reg_pid *reg_pid; @@ -2536,8 +2574,8 @@ static int setup_buffer_reg_pid(struct ust_app_session *ua_sess, * This is the create channel path meaning that if there is NO * registry available, we have to create one for this session. */ - ret = buffer_reg_pid_create(ua_sess->id, ®_pid, - ua_sess->root_shm_path, ua_sess->shm_path); + ret = buffer_reg_pid_create( + ua_sess->id, ®_pid, ua_sess->root_shm_path, ua_sess->shm_path); if (ret < 0) { goto error; } @@ -2546,12 +2584,16 @@ static int setup_buffer_reg_pid(struct ust_app_session *ua_sess, } /* Initialize registry. */ - reg_pid->registry->reg.ust = ust_registry_session_per_pid_create(app, app->abi, - app->version.major, app->version.minor, reg_pid->root_shm_path, - reg_pid->shm_path, - lttng_credentials_get_uid(&ua_sess->effective_credentials), - lttng_credentials_get_gid(&ua_sess->effective_credentials), - ua_sess->tracing_id); + reg_pid->registry->reg.ust = ust_registry_session_per_pid_create( + app, + app->abi, + app->version.major, + app->version.minor, + reg_pid->root_shm_path, + reg_pid->shm_path, + lttng_credentials_get_uid(&ua_sess->effective_credentials), + lttng_credentials_get_gid(&ua_sess->effective_credentials), + ua_sess->tracing_id); if (!reg_pid->registry->reg.ust) { /* * reg_pid->registry->reg.ust is NULL upon error, so we need to @@ -2584,8 +2626,9 @@ error: * Return 0 on success or else a negative value. */ static int setup_buffer_reg_uid(struct ltt_ust_session *usess, - struct ust_app_session *ua_sess, - struct ust_app *app, struct buffer_reg_uid **regp) + struct ust_app_session *ua_sess, + struct ust_app *app, + struct buffer_reg_uid **regp) { int ret = 0; struct buffer_reg_uid *reg_uid; @@ -2601,9 +2644,13 @@ static int setup_buffer_reg_uid(struct ltt_ust_session *usess, * This is the create channel path meaning that if there is NO * registry available, we have to create one for this session. */ - ret = buffer_reg_uid_create(usess->id, app->abi.bits_per_long, app->uid, - LTTNG_DOMAIN_UST, ®_uid, ua_sess->root_shm_path, - ua_sess->shm_path); + ret = buffer_reg_uid_create(usess->id, + app->abi.bits_per_long, + app->uid, + LTTNG_DOMAIN_UST, + ®_uid, + ua_sess->root_shm_path, + ua_sess->shm_path); if (ret < 0) { goto error; } @@ -2613,8 +2660,14 @@ static int setup_buffer_reg_uid(struct ltt_ust_session *usess, /* Initialize registry. */ reg_uid->registry->reg.ust = ust_registry_session_per_uid_create(app->abi, - app->version.major, app->version.minor, reg_uid->root_shm_path, - reg_uid->shm_path, usess->uid, usess->gid, ua_sess->tracing_id, app->uid); + app->version.major, + app->version.minor, + reg_uid->root_shm_path, + reg_uid->shm_path, + usess->uid, + usess->gid, + ua_sess->tracing_id, + app->uid); if (!reg_uid->registry->reg.ust) { /* * reg_uid->registry->reg.ust is NULL upon error, so we need to @@ -2622,7 +2675,7 @@ static int setup_buffer_reg_uid(struct ltt_ust_session *usess, * that if the buffer registry can be found, its ust registry is * non-NULL. */ - buffer_reg_uid_destroy(reg_uid, NULL); + buffer_reg_uid_destroy(reg_uid, nullptr); goto error; } @@ -2653,8 +2706,9 @@ error: * -ENOTCONN which is the default code if the lttng_ust_ctl_create_session fails. */ static int find_or_create_ust_app_session(struct ltt_ust_session *usess, - struct ust_app *app, struct ust_app_session **ua_sess_ptr, - int *is_created) + struct ust_app *app, + struct ust_app_session **ua_sess_ptr, + int *is_created) { int ret, created = 0; struct ust_app_session *ua_sess; @@ -2666,11 +2720,12 @@ static int find_or_create_ust_app_session(struct ltt_ust_session *usess, health_code_update(); ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { DBG2("UST app pid: %d session id %" PRIu64 " not found, creating it", - app->pid, usess->id); + app->pid, + usess->id); ua_sess = alloc_ust_app_session(); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { /* Only malloc can failed so something is really wrong */ ret = -ENOMEM; goto error; @@ -2682,7 +2737,7 @@ static int find_or_create_ust_app_session(struct ltt_ust_session *usess, switch (usess->buffer_type) { case LTTNG_BUFFER_PER_PID: /* Init local registry. */ - ret = setup_buffer_reg_pid(ua_sess, app, NULL); + ret = setup_buffer_reg_pid(ua_sess, app, nullptr); if (ret < 0) { delete_ust_app_session(-1, ua_sess, app); goto error; @@ -2690,7 +2745,7 @@ static int find_or_create_ust_app_session(struct ltt_ust_session *usess, break; case LTTNG_BUFFER_PER_UID: /* Look for a global registry. If none exists, create one. */ - ret = setup_buffer_reg_uid(usess, ua_sess, app, NULL); + ret = setup_buffer_reg_uid(usess, ua_sess, app, nullptr); if (ret < 0) { delete_ust_app_session(-1, ua_sess, app); goto error; @@ -2711,15 +2766,19 @@ static int find_or_create_ust_app_session(struct ltt_ust_session *usess, if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG("UST app creating session failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); ret = 0; } else if (ret == -EAGAIN) { DBG("UST app creating session failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); ret = 0; } else { ERR("UST app creating session failed with ret %d: pid = %d, sock =%d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } delete_ust_app_session(-1, ua_sess, app); if (ret != -ENOMEM) { @@ -2735,12 +2794,10 @@ static int find_or_create_ust_app_session(struct ltt_ust_session *usess, ua_sess->handle = ret; /* Add ust app session to app's HT */ - lttng_ht_node_init_u64(&ua_sess->node, - ua_sess->tracing_id); + lttng_ht_node_init_u64(&ua_sess->node, ua_sess->tracing_id); lttng_ht_add_unique_u64(app->sessions, &ua_sess->node); lttng_ht_node_init_ulong(&ua_sess->ust_objd_node, ua_sess->handle); - lttng_ht_add_unique_ulong(app->ust_sessions_objd, - &ua_sess->ust_objd_node); + lttng_ht_add_unique_ulong(app->ust_sessions_objd, &ua_sess->ust_objd_node); DBG2("UST app session created successfully with handle %d", ret); } @@ -2780,19 +2837,17 @@ static int ht_match_ust_app_ctx(struct cds_lfht_node *node, const void *_key) goto no_match; } - switch(key->ctx) { + switch (key->ctx) { case LTTNG_UST_ABI_CONTEXT_PERF_THREAD_COUNTER: if (strncmp(key->u.perf_counter.name, - ctx->ctx.u.perf_counter.name, - sizeof(key->u.perf_counter.name))) { + ctx->ctx.u.perf_counter.name, + sizeof(key->u.perf_counter.name)) != 0) { goto no_match; } break; case LTTNG_UST_ABI_CONTEXT_APP_CONTEXT: - if (strcmp(key->u.app_ctx.provider_name, - ctx->ctx.u.app_ctx.provider_name) || - strcmp(key->u.app_ctx.ctx_name, - ctx->ctx.u.app_ctx.ctx_name)) { + if (strcmp(key->u.app_ctx.provider_name, ctx->ctx.u.app_ctx.provider_name) != 0 || + strcmp(key->u.app_ctx.ctx_name, ctx->ctx.u.app_ctx.ctx_name) != 0) { goto no_match; } break; @@ -2813,27 +2868,29 @@ no_match: * Must be called while holding RCU read side lock. * Return an ust_app_ctx object or NULL on error. */ -static -struct ust_app_ctx *find_ust_app_context(struct lttng_ht *ht, - struct lttng_ust_context_attr *uctx) +static struct ust_app_ctx *find_ust_app_context(struct lttng_ht *ht, + struct lttng_ust_context_attr *uctx) { struct lttng_ht_iter iter; struct lttng_ht_node_ulong *node; - struct ust_app_ctx *app_ctx = NULL; + struct ust_app_ctx *app_ctx = nullptr; LTTNG_ASSERT(uctx); LTTNG_ASSERT(ht); ASSERT_RCU_READ_LOCKED(); /* Lookup using the lttng_ust_context_type and a custom match fct. */ - cds_lfht_lookup(ht->ht, ht->hash_fct((void *) uctx->ctx, lttng_ht_seed), - ht_match_ust_app_ctx, uctx, &iter.iter); + cds_lfht_lookup(ht->ht, + ht->hash_fct((void *) uctx->ctx, lttng_ht_seed), + ht_match_ust_app_ctx, + uctx, + &iter.iter); node = lttng_ht_iter_get_node_ulong(&iter); if (!node) { goto end; } - app_ctx = caa_container_of(node, struct ust_app_ctx, node); + app_ctx = lttng::utils::container_of(node, &ust_app_ctx::node); end: return app_ctx; @@ -2844,10 +2901,9 @@ end: * * Called with UST app session lock held and a RCU read side lock. */ -static -int create_ust_app_channel_context(struct ust_app_channel *ua_chan, - struct lttng_ust_context_attr *uctx, - struct ust_app *app) +static int create_ust_app_channel_context(struct ust_app_channel *ua_chan, + struct lttng_ust_context_attr *uctx, + struct ust_app *app) { int ret = 0; struct ust_app_ctx *ua_ctx; @@ -2863,7 +2919,7 @@ int create_ust_app_channel_context(struct ust_app_channel *ua_chan, } ua_ctx = alloc_ust_app_ctx(uctx); - if (ua_ctx == NULL) { + if (ua_ctx == nullptr) { /* malloc failed */ ret = -ENOMEM; goto error; @@ -2887,9 +2943,7 @@ error: * * Called with UST app session lock held. */ -static -int enable_ust_app_event(struct ust_app_event *ua_event, - struct ust_app *app) +static int enable_ust_app_event(struct ust_app_event *ua_event, struct ust_app *app) { int ret; @@ -2898,7 +2952,7 @@ int enable_ust_app_event(struct ust_app_event *ua_event, goto error; } - ua_event->enabled = 1; + ua_event->enabled = true; error: return ret; @@ -2907,8 +2961,7 @@ error: /* * Disable on the tracer side a ust app event for the session and channel. */ -static int disable_ust_app_event(struct ust_app_event *ua_event, - struct ust_app *app) +static int disable_ust_app_event(struct ust_app_event *ua_event, struct ust_app *app) { int ret; @@ -2917,7 +2970,7 @@ static int disable_ust_app_event(struct ust_app_event *ua_event, goto error; } - ua_event->enabled = 0; + ua_event->enabled = false; error: return ret; @@ -2926,9 +2979,9 @@ error: /* * Lookup ust app channel for session and disable it on the tracer side. */ -static -int disable_ust_app_channel(struct ust_app_session *ua_sess, - struct ust_app_channel *ua_chan, struct ust_app *app) +static int disable_ust_app_channel(struct ust_app_session *ua_sess, + struct ust_app_channel *ua_chan, + struct ust_app *app) { int ret; @@ -2937,7 +2990,7 @@ int disable_ust_app_channel(struct ust_app_session *ua_sess, goto error; } - ua_chan->enabled = 0; + ua_chan->enabled = false; error: return ret; @@ -2948,7 +3001,8 @@ error: * MUST be called with a RCU read side lock acquired. */ static int enable_ust_app_channel(struct ust_app_session *ua_sess, - struct ltt_ust_channel *uchan, struct ust_app *app) + struct ltt_ust_channel *uchan, + struct ust_app *app) { int ret = 0; struct lttng_ht_iter iter; @@ -2957,15 +3011,16 @@ static int enable_ust_app_channel(struct ust_app_session *ua_sess, ASSERT_RCU_READ_LOCKED(); - lttng_ht_lookup(ua_sess->channels, (void *)uchan->name, &iter); + lttng_ht_lookup(ua_sess->channels, (void *) uchan->name, &iter); ua_chan_node = lttng_ht_iter_get_node_str(&iter); - if (ua_chan_node == NULL) { + if (ua_chan_node == nullptr) { DBG2("Unable to find channel %s in ust session id %" PRIu64, - uchan->name, ua_sess->tracing_id); + uchan->name, + ua_sess->tracing_id); goto error; } - ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node); + ua_chan = lttng::utils::container_of(ua_chan_node, &ust_app_channel::node); ret = enable_ust_channel(app, ua_sess, ua_chan); if (ret < 0) { @@ -2984,8 +3039,10 @@ error: * Return 0 on success or else a negative value. */ static int do_consumer_create_channel(struct ltt_ust_session *usess, - struct ust_app_session *ua_sess, struct ust_app_channel *ua_chan, - int bitness, lsu::registry_session *registry) + struct ust_app_session *ua_sess, + struct ust_app_channel *ua_chan, + int bitness, + lsu::registry_session *registry) { int ret; unsigned int nb_fd = 0; @@ -3019,8 +3076,8 @@ static int do_consumer_create_channel(struct ltt_ust_session *usess, * Ask consumer to create channel. The consumer will return the number of * stream we have to expect. */ - ret = ust_consumer_ask_channel(ua_sess, ua_chan, usess->consumer, socket, - registry, usess->current_trace_chunk); + ret = ust_consumer_ask_channel( + ua_sess, ua_chan, usess->consumer, socket, registry, usess->current_trace_chunk); if (ret < 0) { goto error_ask; } @@ -3079,7 +3136,7 @@ error: * Return 0 on success or else a negative value. */ static int duplicate_stream_object(struct buffer_reg_stream *reg_stream, - struct ust_app_stream *stream) + struct ust_app_stream *stream) { int ret; @@ -3094,11 +3151,12 @@ static int duplicate_stream_object(struct buffer_reg_stream *reg_stream, } /* Duplicate object for stream once the original is in the registry. */ - ret = lttng_ust_ctl_duplicate_ust_object_data(&stream->obj, - reg_stream->obj.ust); + ret = lttng_ust_ctl_duplicate_ust_object_data(&stream->obj, reg_stream->obj.ust); if (ret < 0) { ERR("Duplicate stream obj from %p to %p failed with ret %d", - reg_stream->obj.ust, stream->obj, ret); + reg_stream->obj.ust, + stream->obj, + ret); lttng_fd_put(LTTNG_FD_APPS, 2); goto error; } @@ -3115,7 +3173,7 @@ error: * Return 0 on success or else a negative value. */ static int duplicate_channel_object(struct buffer_reg_channel *buf_reg_chan, - struct ust_app_channel *ua_chan) + struct ust_app_channel *ua_chan) { int ret; @@ -3133,7 +3191,9 @@ static int duplicate_channel_object(struct buffer_reg_channel *buf_reg_chan, ret = lttng_ust_ctl_duplicate_ust_object_data(&ua_chan->obj, buf_reg_chan->obj.ust); if (ret < 0) { ERR("Duplicate channel obj from %p to %p failed with ret: %d", - buf_reg_chan->obj.ust, ua_chan->obj, ret); + buf_reg_chan->obj.ust, + ua_chan->obj, + ret); goto error; } ua_chan->handle = ua_chan->obj->handle; @@ -3153,8 +3213,8 @@ error_fd_get: * Return 0 on success or else a negative value. */ static int setup_buffer_reg_streams(struct buffer_reg_channel *buf_reg_chan, - struct ust_app_channel *ua_chan, - struct ust_app *app) + struct ust_app_channel *ua_chan, + struct ust_app *app) { int ret = 0; struct ust_app_stream *stream, *stmp; @@ -3165,7 +3225,7 @@ static int setup_buffer_reg_streams(struct buffer_reg_channel *buf_reg_chan, DBG2("UST app setup buffer registry stream"); /* Send all streams to application. */ - cds_list_for_each_entry_safe(stream, stmp, &ua_chan->streams.head, list) { + cds_list_for_each_entry_safe (stream, stmp, &ua_chan->streams.head, list) { struct buffer_reg_stream *reg_stream; ret = buffer_reg_stream_create(®_stream); @@ -3178,7 +3238,7 @@ static int setup_buffer_reg_streams(struct buffer_reg_channel *buf_reg_chan, * stream call does not release the object. */ reg_stream->obj.ust = stream->obj; - stream->obj = NULL; + stream->obj = nullptr; buffer_reg_stream_add(reg_stream, buf_reg_chan); /* We don't need the streams anymore. */ @@ -3199,10 +3259,11 @@ error: * Return 0 on success else a negative value. */ static int create_buffer_reg_channel(struct buffer_reg_session *reg_sess, - struct ust_app_channel *ua_chan, struct buffer_reg_channel **regp) + struct ust_app_channel *ua_chan, + struct buffer_reg_channel **regp) { int ret; - struct buffer_reg_channel *buf_reg_chan = NULL; + struct buffer_reg_channel *buf_reg_chan = nullptr; LTTNG_ASSERT(reg_sess); LTTNG_ASSERT(ua_chan); @@ -3223,7 +3284,8 @@ static int create_buffer_reg_channel(struct buffer_reg_session *reg_sess, try { reg_sess->reg.ust->add_channel(ua_chan->tracing_channel_id); } catch (const std::exception& ex) { - ERR("Failed to add a channel registry to userspace registry session: %s", ex.what()); + ERR("Failed to add a channel registry to userspace registry session: %s", + ex.what()); ret = -1; goto error; } @@ -3250,8 +3312,9 @@ error_create: * Return 0 on success else a negative value. */ static int setup_buffer_reg_channel(struct buffer_reg_session *reg_sess, - struct ust_app_channel *ua_chan, struct buffer_reg_channel *buf_reg_chan, - struct ust_app *app) + struct ust_app_channel *ua_chan, + struct buffer_reg_channel *buf_reg_chan, + struct ust_app *app) { int ret; @@ -3269,7 +3332,7 @@ static int setup_buffer_reg_channel(struct buffer_reg_session *reg_sess, } buf_reg_chan->obj.ust = ua_chan->obj; - ua_chan->obj = NULL; + ua_chan->obj = nullptr; return 0; @@ -3285,8 +3348,9 @@ error: * Return 0 on success else a negative value. */ static int send_channel_uid_to_ust(struct buffer_reg_channel *buf_reg_chan, - struct ust_app *app, struct ust_app_session *ua_sess, - struct ust_app_channel *ua_chan) + struct ust_app *app, + struct ust_app_session *ua_sess, + struct ust_app_channel *ua_chan) { int ret; struct buffer_reg_stream *reg_stream; @@ -3306,12 +3370,15 @@ static int send_channel_uid_to_ust(struct buffer_reg_channel *buf_reg_chan, /* Send channel to the application. */ ret = ust_consumer_send_channel_to_ust(app, ua_sess, ua_chan); if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { - ret = -ENOTCONN; /* Caused by app exiting. */ + ret = -ENOTCONN; /* Caused by app exiting. */ goto error; } else if (ret == -EAGAIN) { /* Caused by timeout. */ - WARN("Communication with application %d timed out on send_channel for channel \"%s\" of session \"%" PRIu64 "\".", - app->pid, ua_chan->name, ua_sess->tracing_id); + WARN("Communication with application %d timed out on send_channel for channel \"%s\" of session \"%" PRIu64 + "\".", + app->pid, + ua_chan->name, + ua_sess->tracing_id); /* Treat this the same way as an application that is exiting. */ ret = -ENOTCONN; goto error; @@ -3323,7 +3390,7 @@ static int send_channel_uid_to_ust(struct buffer_reg_channel *buf_reg_chan, /* Send all streams to application. */ pthread_mutex_lock(&buf_reg_chan->stream_list_lock); - cds_list_for_each_entry(reg_stream, &buf_reg_chan->streams, lnode) { + cds_list_for_each_entry (reg_stream, &buf_reg_chan->streams, lnode) { struct ust_app_stream stream = {}; ret = duplicate_stream_object(reg_stream, &stream); @@ -3341,10 +3408,11 @@ static int send_channel_uid_to_ust(struct buffer_reg_channel *buf_reg_chan, * Treat this the same way as an application * that is exiting. */ - WARN("Communication with application %d timed out on send_stream for stream of channel \"%s\" of session \"%" PRIu64 "\".", - app->pid, - ua_chan->name, - ua_sess->tracing_id); + WARN("Communication with application %d timed out on send_stream for stream of channel \"%s\" of session \"%" PRIu64 + "\".", + app->pid, + ua_chan->name, + ua_sess->tracing_id); ret = -ENOTCONN; } (void) release_ust_app_stream(-1, &stream, app); @@ -3373,13 +3441,14 @@ error: * Return 0 on success else a negative value. */ static int create_channel_per_uid(struct ust_app *app, - struct ltt_ust_session *usess, struct ust_app_session *ua_sess, - struct ust_app_channel *ua_chan) + struct ltt_ust_session *usess, + struct ust_app_session *ua_sess, + struct ust_app_channel *ua_chan) { int ret; struct buffer_reg_uid *reg_uid; struct buffer_reg_channel *buf_reg_chan; - struct ltt_session *session = NULL; + struct ltt_session *session = nullptr; enum lttng_error_code notification_ret; LTTNG_ASSERT(app); @@ -3398,8 +3467,7 @@ static int create_channel_per_uid(struct ust_app *app, */ LTTNG_ASSERT(reg_uid); - buf_reg_chan = buffer_reg_channel_find(ua_chan->tracing_channel_id, - reg_uid); + buf_reg_chan = buffer_reg_channel_find(ua_chan->tracing_channel_id, reg_uid); if (buf_reg_chan) { goto send_channel; } @@ -3407,8 +3475,7 @@ static int create_channel_per_uid(struct ust_app *app, /* Create the buffer registry channel object. */ ret = create_buffer_reg_channel(reg_uid->registry, ua_chan, &buf_reg_chan); if (ret < 0) { - ERR("Error creating the UST channel \"%s\" registry instance", - ua_chan->name); + ERR("Error creating the UST channel \"%s\" registry instance", ua_chan->name); goto error; } @@ -3421,11 +3488,10 @@ static int create_channel_per_uid(struct ust_app *app, * Create the buffers on the consumer side. This call populates the * ust app channel object with all streams and data object. */ - ret = do_consumer_create_channel(usess, ua_sess, ua_chan, - app->abi.bits_per_long, reg_uid->registry->reg.ust); + ret = do_consumer_create_channel( + usess, ua_sess, ua_chan, app->abi.bits_per_long, reg_uid->registry->reg.ust); if (ret < 0) { - ERR("Error creating UST channel \"%s\" on the consumer daemon", - ua_chan->name); + ERR("Error creating UST channel \"%s\" on the consumer daemon", ua_chan->name); /* * Let's remove the previously created buffer registry channel so @@ -3434,7 +3500,7 @@ static int create_channel_per_uid(struct ust_app *app, auto locked_registry = reg_uid->registry->reg.ust->lock(); try { locked_registry->remove_channel(ua_chan->tracing_channel_id, false); - } catch (const std::exception &ex) { + } catch (const std::exception& ex) { DBG("Could not find channel for removal: %s", ex.what()); } buffer_reg_channel_remove(reg_uid->registry, buf_reg_chan); @@ -3445,8 +3511,7 @@ static int create_channel_per_uid(struct ust_app *app, /* * Setup the streams and add it to the session registry. */ - ret = setup_buffer_reg_channel(reg_uid->registry, - ua_chan, buf_reg_chan, app); + ret = setup_buffer_reg_channel(reg_uid->registry, ua_chan, buf_reg_chan, app); if (ret < 0) { ERR("Error setting up UST channel \"%s\"", ua_chan->name); goto error; @@ -3454,22 +3519,21 @@ static int create_channel_per_uid(struct ust_app *app, { auto locked_registry = reg_uid->registry->reg.ust->lock(); - auto& ust_reg_chan = locked_registry->get_channel(ua_chan->tracing_channel_id); + auto& ust_reg_chan = locked_registry->channel(ua_chan->tracing_channel_id); ust_reg_chan._consumer_key = ua_chan->key; } /* Notify the notification subsystem of the channel's creation. */ notification_ret = notification_thread_command_add_channel( - the_notification_thread_handle, session->name, - lttng_credentials_get_uid( - &ua_sess->effective_credentials), - lttng_credentials_get_gid( - &ua_sess->effective_credentials), - ua_chan->name, ua_chan->key, LTTNG_DOMAIN_UST, - ua_chan->attr.subbuf_size * ua_chan->attr.num_subbuf); + the_notification_thread_handle, + session->id, + ua_chan->name, + ua_chan->key, + LTTNG_DOMAIN_UST, + ua_chan->attr.subbuf_size * ua_chan->attr.num_subbuf); if (notification_ret != LTTNG_OK) { - ret = - (int) notification_ret; + ret = -(int) notification_ret; ERR("Failed to add channel to notification thread"); goto error; } @@ -3500,13 +3564,14 @@ error: * Return 0 on success else a negative value. */ static int create_channel_per_pid(struct ust_app *app, - struct ltt_ust_session *usess, struct ust_app_session *ua_sess, - struct ust_app_channel *ua_chan) + struct ltt_ust_session *usess, + struct ust_app_session *ua_sess, + struct ust_app_channel *ua_chan) { int ret; lsu::registry_session *registry; enum lttng_error_code cmd_ret; - struct ltt_session *session = NULL; + struct ltt_session *session = nullptr; uint64_t chan_reg_key; LTTNG_ASSERT(app); @@ -3526,8 +3591,9 @@ static int create_channel_per_pid(struct ust_app *app, try { registry->add_channel(ua_chan->key); } catch (const std::exception& ex) { - ERR("Error creating the UST channel \"%s\" registry instance: %s", ua_chan->name, - ex.what()); + ERR("Error creating the UST channel \"%s\" registry instance: %s", + ua_chan->name, + ex.what()); ret = -1; goto error; } @@ -3538,11 +3604,9 @@ static int create_channel_per_pid(struct ust_app *app, ASSERT_SESSION_LIST_LOCKED(); /* Create and get channel on the consumer side. */ - ret = do_consumer_create_channel(usess, ua_sess, ua_chan, - app->abi.bits_per_long, registry); + ret = do_consumer_create_channel(usess, ua_sess, ua_chan, app->abi.bits_per_long, registry); if (ret < 0) { - ERR("Error creating UST channel \"%s\" on the consumer daemon", - ua_chan->name); + ERR("Error creating UST channel \"%s\" on the consumer daemon", ua_chan->name); goto error_remove_from_registry; } @@ -3558,20 +3622,19 @@ static int create_channel_per_pid(struct ust_app *app, { auto locked_registry = registry->lock(); - auto& ust_reg_chan = locked_registry->get_channel(chan_reg_key); + auto& ust_reg_chan = locked_registry->channel(chan_reg_key); ust_reg_chan._consumer_key = ua_chan->key; } - cmd_ret = notification_thread_command_add_channel( - the_notification_thread_handle, session->name, - lttng_credentials_get_uid( - &ua_sess->effective_credentials), - lttng_credentials_get_gid( - &ua_sess->effective_credentials), - ua_chan->name, ua_chan->key, LTTNG_DOMAIN_UST, - ua_chan->attr.subbuf_size * ua_chan->attr.num_subbuf); + cmd_ret = notification_thread_command_add_channel(the_notification_thread_handle, + session->id, + ua_chan->name, + ua_chan->key, + LTTNG_DOMAIN_UST, + ua_chan->attr.subbuf_size * + ua_chan->attr.num_subbuf); if (cmd_ret != LTTNG_OK) { - ret = - (int) cmd_ret; + ret = -(int) cmd_ret; ERR("Failed to add channel to notification thread"); goto error_remove_from_registry; } @@ -3604,8 +3667,9 @@ error: * the application exited concurrently. */ static int ust_app_channel_send(struct ust_app *app, - struct ltt_ust_session *usess, struct ust_app_session *ua_sess, - struct ust_app_channel *ua_chan) + struct ltt_ust_session *usess, + struct ust_app_session *ua_sess, + struct ust_app_channel *ua_chan) { int ret; @@ -3664,10 +3728,10 @@ error: * Return 0 on success or else a negative value. */ static int ust_app_channel_allocate(struct ust_app_session *ua_sess, - struct ltt_ust_channel *uchan, - enum lttng_ust_abi_chan_type type, - struct ltt_ust_session *usess __attribute__((unused)), - struct ust_app_channel **ua_chanp) + struct ltt_ust_channel *uchan, + enum lttng_ust_abi_chan_type type, + struct ltt_ust_session *usess __attribute__((unused)), + struct ust_app_channel **ua_chanp) { int ret = 0; struct lttng_ht_iter iter; @@ -3677,15 +3741,15 @@ static int ust_app_channel_allocate(struct ust_app_session *ua_sess, ASSERT_RCU_READ_LOCKED(); /* Lookup channel in the ust app session */ - lttng_ht_lookup(ua_sess->channels, (void *)uchan->name, &iter); + lttng_ht_lookup(ua_sess->channels, (void *) uchan->name, &iter); ua_chan_node = lttng_ht_iter_get_node_str(&iter); - if (ua_chan_node != NULL) { - ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node); + if (ua_chan_node != nullptr) { + ua_chan = lttng::utils::container_of(ua_chan_node, &ust_app_channel::node); goto end; } ua_chan = alloc_ust_app_channel(uchan->name, ua_sess, &uchan->attr); - if (ua_chan == NULL) { + if (ua_chan == nullptr) { /* Only malloc can fail here */ ret = -ENOMEM; goto error; @@ -3715,10 +3779,9 @@ error: * Must be called with the RCU read side lock held. * Called with ust app session mutex held. */ -static -int create_ust_app_event(struct ust_app_channel *ua_chan, - struct ltt_ust_event *uevent, - struct ust_app *app) +static int create_ust_app_event(struct ust_app_channel *ua_chan, + struct ltt_ust_event *uevent, + struct ust_app *app) { int ret = 0; struct ust_app_event *ua_event; @@ -3726,7 +3789,7 @@ int create_ust_app_event(struct ust_app_channel *ua_chan, ASSERT_RCU_READ_LOCKED(); ua_event = alloc_ust_app_event(uevent->attr.name, &uevent->attr); - if (ua_event == NULL) { + if (ua_event == nullptr) { /* Only failure mode of alloc_ust_app_event(). */ ret = -ENOMEM; goto end; @@ -3744,18 +3807,19 @@ int create_ust_app_event(struct ust_app_channel *ua_chan, */ if (ret == -LTTNG_UST_ERR_EXIST) { ERR("Tracer for application reported that an event being created already existed: " - "event_name = \"%s\", pid = %d, ppid = %d, uid = %d, gid = %d", - uevent->attr.name, - app->pid, app->ppid, app->uid, - app->gid); + "event_name = \"%s\", pid = %d, ppid = %d, uid = %d, gid = %d", + uevent->attr.name, + app->pid, + app->ppid, + app->uid, + app->gid); } goto error; } add_unique_ust_app_event(ua_chan, ua_event); - DBG2("UST app create event completed: app = '%s' pid = %d", - app->name, app->pid); + DBG2("UST app create event completed: app = '%s' pid = %d", app->name, app->pid); end: return ret; @@ -3772,9 +3836,7 @@ error: * Must be called with the RCU read side lock held. * Called with ust app session mutex held. */ -static -int create_ust_app_event_notifier_rule(struct lttng_trigger *trigger, - struct ust_app *app) +static int create_ust_app_event_notifier_rule(struct lttng_trigger *trigger, struct ust_app *app) { int ret = 0; struct ust_app_event_notifier_rule *ua_event_notifier_rule; @@ -3782,7 +3844,7 @@ int create_ust_app_event_notifier_rule(struct lttng_trigger *trigger, ASSERT_RCU_READ_LOCKED(); ua_event_notifier_rule = alloc_ust_app_event_notifier_rule(trigger); - if (ua_event_notifier_rule == NULL) { + if (ua_event_notifier_rule == nullptr) { ret = -ENOMEM; goto end; } @@ -3798,19 +3860,23 @@ int create_ust_app_event_notifier_rule(struct lttng_trigger *trigger, */ if (ret == -LTTNG_UST_ERR_EXIST) { ERR("Tracer for application reported that an event notifier being created already exists: " - "token = \"%" PRIu64 "\", pid = %d, ppid = %d, uid = %d, gid = %d", - lttng_trigger_get_tracer_token(trigger), - app->pid, app->ppid, app->uid, - app->gid); + "token = \"%" PRIu64 "\", pid = %d, ppid = %d, uid = %d, gid = %d", + lttng_trigger_get_tracer_token(trigger), + app->pid, + app->ppid, + app->uid, + app->gid); } goto error; } lttng_ht_add_unique_u64(app->token_to_event_notifier_rule_ht, - &ua_event_notifier_rule->node); + &ua_event_notifier_rule->node); DBG2("UST app create token event rule completed: app = '%s', pid = %d, token = %" PRIu64, - app->name, app->pid, lttng_trigger_get_tracer_token(trigger)); + app->name, + app->pid, + lttng_trigger_get_tracer_token(trigger)); goto end; @@ -3827,12 +3893,13 @@ end: * Called with UST app session lock held and RCU read side lock. */ static int create_ust_app_metadata(struct ust_app_session *ua_sess, - struct ust_app *app, struct consumer_output *consumer) + struct ust_app *app, + struct consumer_output *consumer) { int ret = 0; struct ust_app_channel *metadata; struct consumer_socket *socket; - struct ltt_session *session = NULL; + struct ltt_session *session = nullptr; LTTNG_ASSERT(ua_sess); LTTNG_ASSERT(app); @@ -3850,7 +3917,7 @@ static int create_ust_app_metadata(struct ust_app_session *ua_sess, } /* Allocate UST metadata */ - metadata = alloc_ust_app_channel(DEFAULT_METADATA_NAME, ua_sess, NULL); + metadata = alloc_ust_app_channel(DEFAULT_METADATA_NAME, ua_sess, nullptr); if (!metadata) { /* malloc() failed */ ret = -ENOMEM; @@ -3892,8 +3959,12 @@ static int create_ust_app_metadata(struct ust_app_session *ua_sess, * never added or monitored until we do a first push metadata to the * consumer. */ - ret = ust_consumer_ask_channel(ua_sess, metadata, consumer, socket, - locked_registry.get(), session->current_trace_chunk); + ret = ust_consumer_ask_channel(ua_sess, + metadata, + consumer, + socket, + locked_registry.get(), + session->current_trace_chunk); if (ret < 0) { /* Nullify the metadata key so we don't try to close it later on. */ locked_registry->_metadata_key = 0; @@ -3913,8 +3984,7 @@ static int create_ust_app_metadata(struct ust_app_session *ua_sess, goto error_consumer; } - DBG2("UST metadata with key %" PRIu64 " created for app pid %d", - metadata->key, app->pid); + DBG2("UST metadata with key %" PRIu64 " created for app pid %d", metadata->key, app->pid); error_consumer: lttng_fd_put(LTTNG_FD_APPS, 1); @@ -3932,20 +4002,20 @@ error: */ struct ust_app *ust_app_find_by_pid(pid_t pid) { - struct ust_app *app = NULL; + struct ust_app *app = nullptr; struct lttng_ht_node_ulong *node; struct lttng_ht_iter iter; - lttng_ht_lookup(ust_app_ht, (void *)((unsigned long) pid), &iter); + lttng_ht_lookup(ust_app_ht, (void *) ((unsigned long) pid), &iter); node = lttng_ht_iter_get_node_ulong(&iter); - if (node == NULL) { + if (node == nullptr) { DBG2("UST app no found with pid %d", pid); goto error; } DBG2("Found UST app by pid %d", pid); - app = caa_container_of(node, struct ust_app, pid_n); + app = lttng::utils::container_of(node, &ust_app::pid_n); error: return app; @@ -3961,23 +4031,21 @@ error: struct ust_app *ust_app_create(struct ust_register_msg *msg, int sock) { int ret; - struct ust_app *lta = NULL; - struct lttng_pipe *event_notifier_event_source_pipe = NULL; + struct ust_app *lta = nullptr; + struct lttng_pipe *event_notifier_event_source_pipe = nullptr; LTTNG_ASSERT(msg); LTTNG_ASSERT(sock >= 0); DBG3("UST app creating application for socket %d", sock); - if ((msg->bits_per_long == 64 && - (uatomic_read(&the_ust_consumerd64_fd) == - -EINVAL)) || - (msg->bits_per_long == 32 && - (uatomic_read(&the_ust_consumerd32_fd) == - -EINVAL))) { + if ((msg->bits_per_long == 64 && (uatomic_read(&the_ust_consumerd64_fd) == -EINVAL)) || + (msg->bits_per_long == 32 && (uatomic_read(&the_ust_consumerd32_fd) == -EINVAL))) { ERR("Registration failed: application \"%s\" (pid: %d) has " - "%d-bit long, but no consumerd for this size is available.\n", - msg->name, msg->pid, msg->bits_per_long); + "%d-bit long, but no consumerd for this size is available.\n", + msg->name, + msg->pid, + msg->bits_per_long); goto error; } @@ -3989,19 +4057,21 @@ struct ust_app *ust_app_create(struct ust_register_msg *msg, int sock) ret = lttng_fd_get(LTTNG_FD_APPS, 2); if (ret) { ERR("Failed to reserve two file descriptors for the event source pipe while creating a new application instance: app = '%s', pid = %d", - msg->name, (int) msg->pid); + msg->name, + (int) msg->pid); goto error; } event_notifier_event_source_pipe = lttng_pipe_open(FD_CLOEXEC); if (!event_notifier_event_source_pipe) { PERROR("Failed to open application event source pipe: '%s' (pid = %d)", - msg->name, msg->pid); + msg->name, + msg->pid); goto error; } lta = zmalloc(); - if (lta == NULL) { + if (lta == nullptr) { PERROR("malloc"); goto error_free_pipe; } @@ -4020,8 +4090,8 @@ struct ust_app *ust_app_create(struct ust_register_msg *msg, int sock) .uint32_t_alignment = msg->uint32_t_alignment, .uint64_t_alignment = msg->uint64_t_alignment, .byte_order = msg->byte_order == LITTLE_ENDIAN ? - lttng::sessiond::trace::byte_order::LITTLE_ENDIAN_ : - lttng::sessiond::trace::byte_order::BIG_ENDIAN_, + lttng::sessiond::trace::byte_order::LITTLE_ENDIAN_ : + lttng::sessiond::trace::byte_order::BIG_ENDIAN_, }; lta->v_major = msg->major; @@ -4046,7 +4116,7 @@ struct ust_app *ust_app_create(struct ust_register_msg *msg, int sock) lta->pid = msg->pid; lttng_ht_node_init_ulong(<a->pid_n, (unsigned long) lta->pid); lta->sock = sock; - pthread_mutex_init(<a->sock_lock, NULL); + pthread_mutex_init(<a->sock_lock, nullptr); lttng_ht_node_init_ulong(<a->sock_n, (unsigned long) lta->sock); CDS_INIT_LIST_HEAD(<a->teardown_head); @@ -4056,7 +4126,7 @@ error_free_pipe: lttng_pipe_destroy(event_notifier_event_source_pipe); lttng_fd_put(LTTNG_FD_APPS, 2); error: - return NULL; + return nullptr; } /* @@ -4067,7 +4137,7 @@ void ust_app_add(struct ust_app *app) LTTNG_ASSERT(app); LTTNG_ASSERT(app->notify_sock >= 0); - app->registration_time = time(NULL); + app->registration_time = time(nullptr); rcu_read_lock(); @@ -4089,9 +4159,16 @@ void ust_app_add(struct ust_app *app) lttng_ht_add_unique_ulong(ust_app_ht_by_notify_sock, &app->notify_sock_n); DBG("App registered with pid:%d ppid:%d uid:%d gid:%d sock =%d name:%s " - "notify_sock =%d (version %d.%d)", app->pid, app->ppid, app->uid, - app->gid, app->sock, app->name, app->notify_sock, app->v_major, - app->v_minor); + "notify_sock =%d (version %d.%d)", + app->pid, + app->ppid, + app->uid, + app->gid, + app->sock, + app->name, + app->notify_sock, + app->v_major, + app->v_minor); rcu_read_unlock(); } @@ -4114,13 +4191,17 @@ int ust_app_version(struct ust_app *app) if (ret < 0) { if (ret == -LTTNG_UST_ERR_EXITING || ret == -EPIPE) { DBG3("UST app version failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app version failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app version failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } } @@ -4147,7 +4228,7 @@ int ust_app_setup_event_notifier_group(struct ust_app *app) { int ret; int event_pipe_write_fd; - struct lttng_ust_abi_object_data *event_notifier_group = NULL; + struct lttng_ust_abi_object_data *event_notifier_group = nullptr; enum lttng_error_code lttng_ret; enum event_notifier_error_accounting_status event_notifier_error_accounting_status; @@ -4159,25 +4240,29 @@ int ust_app_setup_event_notifier_group(struct ust_app *app) } /* Get the write side of the pipe. */ - event_pipe_write_fd = lttng_pipe_get_writefd( - app->event_notifier_group.event_pipe); + event_pipe_write_fd = lttng_pipe_get_writefd(app->event_notifier_group.event_pipe); pthread_mutex_lock(&app->sock_lock); - ret = lttng_ust_ctl_create_event_notifier_group(app->sock, - event_pipe_write_fd, &event_notifier_group); + ret = lttng_ust_ctl_create_event_notifier_group( + app->sock, event_pipe_write_fd, &event_notifier_group); pthread_mutex_unlock(&app->sock_lock); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { ret = 0; DBG3("UST app create event notifier group failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { ret = 0; WARN("UST app create event notifier group failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app create event notifier group failed with ret %d: pid = %d, sock = %d, event_pipe_write_fd: %d", - ret, app->pid, app->sock, event_pipe_write_fd); + ret, + app->pid, + app->sock, + event_pipe_write_fd); } goto error; } @@ -4185,7 +4270,8 @@ int ust_app_setup_event_notifier_group(struct ust_app *app) ret = lttng_pipe_write_close(app->event_notifier_group.event_pipe); if (ret) { ERR("Failed to close write end of the application's event source pipe: app = '%s' (pid = %d)", - app->name, app->pid); + app->name, + app->pid); goto error; } @@ -4196,32 +4282,34 @@ int ust_app_setup_event_notifier_group(struct ust_app *app) lttng_fd_put(LTTNG_FD_APPS, 1); lttng_ret = notification_thread_command_add_tracer_event_source( - the_notification_thread_handle, - lttng_pipe_get_readfd( - app->event_notifier_group.event_pipe), - LTTNG_DOMAIN_UST); + the_notification_thread_handle, + lttng_pipe_get_readfd(app->event_notifier_group.event_pipe), + LTTNG_DOMAIN_UST); if (lttng_ret != LTTNG_OK) { ERR("Failed to add tracer event source to notification thread"); - ret = - 1; + ret = -1; goto error; } /* Assign handle only when the complete setup is valid. */ app->event_notifier_group.object = event_notifier_group; - event_notifier_error_accounting_status = - event_notifier_error_accounting_register_app(app); + event_notifier_error_accounting_status = event_notifier_error_accounting_register_app(app); switch (event_notifier_error_accounting_status) { case EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_OK: break; case EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_UNSUPPORTED: DBG3("Failed to setup event notifier error accounting (application does not support notifier error accounting): app socket fd = %d, app name = '%s', app pid = %d", - app->sock, app->name, (int) app->pid); + app->sock, + app->name, + (int) app->pid); ret = 0; goto error_accounting; case EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_APP_DEAD: DBG3("Failed to setup event notifier error accounting (application is dead): app socket fd = %d, app name = '%s', app pid = %d", - app->sock, app->name, (int) app->pid); + app->sock, + app->name, + (int) app->pid); ret = 0; goto error_accounting; default: @@ -4234,9 +4322,8 @@ int ust_app_setup_event_notifier_group(struct ust_app *app) error_accounting: lttng_ret = notification_thread_command_remove_tracer_event_source( - the_notification_thread_handle, - lttng_pipe_get_readfd( - app->event_notifier_group.event_pipe)); + the_notification_thread_handle, + lttng_pipe_get_readfd(app->event_notifier_group.event_pipe)); if (lttng_ret != LTTNG_OK) { ERR("Failed to remove application tracer event source from notification thread"); } @@ -4244,7 +4331,7 @@ error_accounting: error: lttng_ust_ctl_release_object(app->sock, app->event_notifier_group.object); free(app->event_notifier_group.object); - app->event_notifier_group.object = NULL; + app->event_notifier_group.object = nullptr; return ret; } @@ -4266,11 +4353,11 @@ void ust_app_unregister(int sock) rcu_read_lock(); /* Get the node reference for a call_rcu */ - lttng_ht_lookup(ust_app_ht_by_sock, (void *)((unsigned long) sock), &ust_app_sock_iter); + lttng_ht_lookup(ust_app_ht_by_sock, (void *) ((unsigned long) sock), &ust_app_sock_iter); node = lttng_ht_iter_get_node_ulong(&ust_app_sock_iter); LTTNG_ASSERT(node); - lta = caa_container_of(node, struct ust_app, sock_n); + lta = lttng::utils::container_of(node, &ust_app::sock_n); DBG("PID %d unregistering with sock %d", lta->pid, sock); /* @@ -4279,8 +4366,7 @@ void ust_app_unregister(int sock) * ensuring proper behavior of data_pending check. * Remove sessions so they are not visible during deletion. */ - cds_lfht_for_each_entry(lta->sessions->ht, &iter.iter, ua_sess, - node.node) { + cds_lfht_for_each_entry (lta->sessions->ht, &iter.iter, ua_sess, node.node) { ret = lttng_ht_del(lta->sessions, &iter); if (ret) { /* The session was already removed so scheduled for teardown. */ @@ -4332,9 +4418,11 @@ void ust_app_unregister(int sock) locked_registry->_metadata_closed = true; } - /* Release lock before communication, see comments in close_metadata(). */ + /* Release lock before communication, see comments in + * close_metadata(). */ locked_registry.reset(); - (void) close_metadata(metadata_key, consumer_bitness, ua_sess->consumer); + (void) close_metadata( + metadata_key, consumer_bitness, ua_sess->consumer); } else { locked_registry.reset(); } @@ -4365,8 +4453,7 @@ void ust_app_unregister(int sock) iter.iter.node = <a->pid_n.node; ret = lttng_ht_del(ust_app_ht, &iter); if (ret) { - DBG3("Unregister app by PID %d failed. This can happen on pid reuse", - lta->pid); + DBG3("Unregister app by PID %d failed. This can happen on pid reuse", lta->pid); } /* Free memory */ @@ -4389,7 +4476,7 @@ int ust_app_list_events(struct lttng_event **events) nbmem = UST_APP_EVENT_LIST_SIZE; tmp_event = calloc(nbmem); - if (tmp_event == NULL) { + if (tmp_event == nullptr) { PERROR("zmalloc ust app events"); ret = -ENOMEM; goto error; @@ -4397,7 +4484,7 @@ int ust_app_list_events(struct lttng_event **events) rcu_read_lock(); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct lttng_ust_abi_tracepoint_iter uiter; health_code_update(); @@ -4414,31 +4501,33 @@ int ust_app_list_events(struct lttng_event **events) if (handle < 0) { if (handle != -EPIPE && handle != -LTTNG_UST_ERR_EXITING) { ERR("UST app list events getting handle failed for app pid %d", - app->pid); + app->pid); } pthread_mutex_unlock(&app->sock_lock); continue; } - while ((ret = lttng_ust_ctl_tracepoint_list_get(app->sock, handle, - &uiter)) != -LTTNG_UST_ERR_NOENT) { + while ((ret = lttng_ust_ctl_tracepoint_list_get(app->sock, handle, &uiter)) != + -LTTNG_UST_ERR_NOENT) { /* Handle ustctl error. */ if (ret < 0) { int release_ret; if (ret != -LTTNG_UST_ERR_EXITING && ret != -EPIPE) { ERR("UST app tp list get failed for app %d with ret %d", - app->sock, ret); + app->sock, + ret); } else { DBG3("UST app tp list get failed. Application is dead"); break; } free(tmp_event); release_ret = lttng_ust_ctl_release_handle(app->sock, handle); - if (release_ret < 0 && - release_ret != -LTTNG_UST_ERR_EXITING && - release_ret != -EPIPE) { - ERR("Error releasing app handle for app %d with ret %d", app->sock, release_ret); + if (release_ret < 0 && release_ret != -LTTNG_UST_ERR_EXITING && + release_ret != -EPIPE) { + ERR("Error releasing app handle for app %d with ret %d", + app->sock, + release_ret); } pthread_mutex_unlock(&app->sock_lock); goto rcu_error; @@ -4452,27 +4541,32 @@ int ust_app_list_events(struct lttng_event **events) new_nbmem = nbmem << 1; DBG2("Reallocating event list from %zu to %zu entries", - nbmem, new_nbmem); - new_tmp_event = (lttng_event *) realloc(tmp_event, - new_nbmem * sizeof(struct lttng_event)); - if (new_tmp_event == NULL) { + nbmem, + new_nbmem); + new_tmp_event = (lttng_event *) realloc( + tmp_event, new_nbmem * sizeof(struct lttng_event)); + if (new_tmp_event == nullptr) { int release_ret; PERROR("realloc ust app events"); free(tmp_event); ret = -ENOMEM; - release_ret = lttng_ust_ctl_release_handle(app->sock, handle); + release_ret = + lttng_ust_ctl_release_handle(app->sock, handle); if (release_ret < 0 && - release_ret != -LTTNG_UST_ERR_EXITING && - release_ret != -EPIPE) { - ERR("Error releasing app handle for app %d with ret %d", app->sock, release_ret); + release_ret != -LTTNG_UST_ERR_EXITING && + release_ret != -EPIPE) { + ERR("Error releasing app handle for app %d with ret %d", + app->sock, + release_ret); } pthread_mutex_unlock(&app->sock_lock); goto rcu_error; } /* Zero the new memory */ - memset(new_tmp_event + nbmem, 0, - (new_nbmem - nbmem) * sizeof(struct lttng_event)); + memset(new_tmp_event + nbmem, + 0, + (new_nbmem - nbmem) * sizeof(struct lttng_event)); nbmem = new_nbmem; tmp_event = new_tmp_event; } @@ -4488,13 +4582,17 @@ int ust_app_list_events(struct lttng_event **events) if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("Error releasing app handle. Application died: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("Error releasing app handle. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("Error releasing app handle with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } } } @@ -4524,7 +4622,7 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) nbmem = UST_APP_EVENT_LIST_SIZE; tmp_event = calloc(nbmem); - if (tmp_event == NULL) { + if (tmp_event == nullptr) { PERROR("zmalloc ust app event fields"); ret = -ENOMEM; goto error; @@ -4532,7 +4630,7 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) rcu_read_lock(); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct lttng_ust_abi_field_iter uiter; health_code_update(); @@ -4549,21 +4647,22 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) if (handle < 0) { if (handle != -EPIPE && handle != -LTTNG_UST_ERR_EXITING) { ERR("UST app list field getting handle failed for app pid %d", - app->pid); + app->pid); } pthread_mutex_unlock(&app->sock_lock); continue; } - while ((ret = lttng_ust_ctl_tracepoint_field_list_get(app->sock, handle, - &uiter)) != -LTTNG_UST_ERR_NOENT) { + while ((ret = lttng_ust_ctl_tracepoint_field_list_get(app->sock, handle, &uiter)) != + -LTTNG_UST_ERR_NOENT) { /* Handle ustctl error. */ if (ret < 0) { int release_ret; if (ret != -LTTNG_UST_ERR_EXITING && ret != -EPIPE) { ERR("UST app tp list field failed for app %d with ret %d", - app->sock, ret); + app->sock, + ret); } else { DBG3("UST app tp list field failed. Application is dead"); break; @@ -4571,10 +4670,11 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) free(tmp_event); release_ret = lttng_ust_ctl_release_handle(app->sock, handle); pthread_mutex_unlock(&app->sock_lock); - if (release_ret < 0 && - release_ret != -LTTNG_UST_ERR_EXITING && - release_ret != -EPIPE) { - ERR("Error releasing app handle for app %d with ret %d", app->sock, release_ret); + if (release_ret < 0 && release_ret != -LTTNG_UST_ERR_EXITING && + release_ret != -EPIPE) { + ERR("Error releasing app handle for app %d with ret %d", + app->sock, + release_ret); } goto rcu_error; } @@ -4587,37 +4687,45 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) new_nbmem = nbmem << 1; DBG2("Reallocating event field list from %zu to %zu entries", - nbmem, new_nbmem); - new_tmp_event = (lttng_event_field *) realloc(tmp_event, - new_nbmem * sizeof(struct lttng_event_field)); - if (new_tmp_event == NULL) { + nbmem, + new_nbmem); + new_tmp_event = (lttng_event_field *) realloc( + tmp_event, new_nbmem * sizeof(struct lttng_event_field)); + if (new_tmp_event == nullptr) { int release_ret; PERROR("realloc ust app event fields"); free(tmp_event); ret = -ENOMEM; - release_ret = lttng_ust_ctl_release_handle(app->sock, handle); + release_ret = + lttng_ust_ctl_release_handle(app->sock, handle); pthread_mutex_unlock(&app->sock_lock); - if (release_ret && - release_ret != -LTTNG_UST_ERR_EXITING && - release_ret != -EPIPE) { - ERR("Error releasing app handle for app %d with ret %d", app->sock, release_ret); + if (release_ret && release_ret != -LTTNG_UST_ERR_EXITING && + release_ret != -EPIPE) { + ERR("Error releasing app handle for app %d with ret %d", + app->sock, + release_ret); } goto rcu_error; } /* Zero the new memory */ - memset(new_tmp_event + nbmem, 0, - (new_nbmem - nbmem) * sizeof(struct lttng_event_field)); + memset(new_tmp_event + nbmem, + 0, + (new_nbmem - nbmem) * sizeof(struct lttng_event_field)); nbmem = new_nbmem; tmp_event = new_tmp_event; } - memcpy(tmp_event[count].field_name, uiter.field_name, LTTNG_UST_ABI_SYM_NAME_LEN); + memcpy(tmp_event[count].field_name, + uiter.field_name, + LTTNG_UST_ABI_SYM_NAME_LEN); /* Mapping between these enums matches 1 to 1. */ tmp_event[count].type = (enum lttng_event_field_type) uiter.type; tmp_event[count].nowrite = uiter.nowrite; - memcpy(tmp_event[count].event.name, uiter.event_name, LTTNG_UST_ABI_SYM_NAME_LEN); + memcpy(tmp_event[count].event.name, + uiter.event_name, + LTTNG_UST_ABI_SYM_NAME_LEN); tmp_event[count].event.loglevel = uiter.loglevel; tmp_event[count].event.type = LTTNG_EVENT_TRACEPOINT; tmp_event[count].event.pid = app->pid; @@ -4626,9 +4734,7 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) } ret = lttng_ust_ctl_release_handle(app->sock, handle); pthread_mutex_unlock(&app->sock_lock); - if (ret < 0 && - ret != -LTTNG_UST_ERR_EXITING && - ret != -EPIPE) { + if (ret < 0 && ret != -LTTNG_UST_ERR_EXITING && ret != -EPIPE) { ERR("Error releasing app handle for app %d with ret %d", app->sock, ret); } } @@ -4648,7 +4754,7 @@ error: /* * Free and clean all traceable apps of the global list. */ -void ust_app_clean_list(void) +void ust_app_clean_list() { int ret; struct ust_app *app; @@ -4660,8 +4766,8 @@ void ust_app_clean_list(void) /* Cleanup notify socket hash table */ if (ust_app_ht_by_notify_sock) { - cds_lfht_for_each_entry(ust_app_ht_by_notify_sock->ht, &iter.iter, app, - notify_sock_n.node) { + cds_lfht_for_each_entry ( + ust_app_ht_by_notify_sock->ht, &iter.iter, app, notify_sock_n.node) { /* * Assert that all notifiers are gone as all triggers * are unregistered prior to this clean-up. @@ -4673,7 +4779,7 @@ void ust_app_clean_list(void) } if (ust_app_ht) { - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { ret = lttng_ht_del(ust_app_ht, &iter); LTTNG_ASSERT(!ret); call_rcu(&app->pid_n.head, delete_ust_app_rcu); @@ -4682,8 +4788,7 @@ void ust_app_clean_list(void) /* Cleanup socket hash table */ if (ust_app_ht_by_sock) { - cds_lfht_for_each_entry(ust_app_ht_by_sock->ht, &iter.iter, app, - sock_n.node) { + cds_lfht_for_each_entry (ust_app_ht_by_sock->ht, &iter.iter, app, sock_n.node) { ret = lttng_ht_del(ust_app_ht_by_sock, &iter); LTTNG_ASSERT(!ret); } @@ -4706,7 +4811,7 @@ void ust_app_clean_list(void) /* * Init UST app hash table. */ -int ust_app_ht_alloc(void) +int ust_app_ht_alloc() { ust_app_ht = lttng_ht_new(0, LTTNG_HT_TYPE_ULONG); if (!ust_app_ht) { @@ -4726,8 +4831,7 @@ int ust_app_ht_alloc(void) /* * For a specific UST session, disable the channel for all registered apps. */ -int ust_app_disable_channel_glb(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan) +int ust_app_disable_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan) { int ret = 0; struct lttng_ht_iter iter; @@ -4738,12 +4842,13 @@ int ust_app_disable_channel_glb(struct ltt_ust_session *usess, LTTNG_ASSERT(usess->active); DBG2("UST app disabling channel %s from global domain for session id %" PRIu64, - uchan->name, usess->id); + uchan->name, + usess->id); rcu_read_lock(); /* For every registered applications */ - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct lttng_ht_iter uiter; if (!app->compatible) { /* @@ -4753,19 +4858,19 @@ int ust_app_disable_channel_glb(struct ltt_ust_session *usess, continue; } ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { continue; } /* Get channel */ - lttng_ht_lookup(ua_sess->channels, (void *)uchan->name, &uiter); + lttng_ht_lookup(ua_sess->channels, (void *) uchan->name, &uiter); ua_chan_node = lttng_ht_iter_get_node_str(&uiter); /* If the session if found for the app, the channel must be there */ LTTNG_ASSERT(ua_chan_node); - ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node); + ua_chan = lttng::utils::container_of(ua_chan_node, &ust_app_channel::node); /* The channel must not be already disabled */ - LTTNG_ASSERT(ua_chan->enabled == 1); + LTTNG_ASSERT(ua_chan->enabled); /* Disable channel onto application */ ret = disable_ust_app_channel(ua_sess, ua_chan, app); @@ -4782,8 +4887,7 @@ int ust_app_disable_channel_glb(struct ltt_ust_session *usess, /* * For a specific UST session, enable the channel for all registered apps. */ -int ust_app_enable_channel_glb(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan) +int ust_app_enable_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan) { int ret = 0; struct lttng_ht_iter iter; @@ -4792,12 +4896,13 @@ int ust_app_enable_channel_glb(struct ltt_ust_session *usess, LTTNG_ASSERT(usess->active); DBG2("UST app enabling channel %s to global domain for session id %" PRIu64, - uchan->name, usess->id); + uchan->name, + usess->id); rcu_read_lock(); /* For every registered applications */ - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { if (!app->compatible) { /* * TODO: In time, we should notice the caller of this error by @@ -4806,7 +4911,7 @@ int ust_app_enable_channel_glb(struct ltt_ust_session *usess, continue; } ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { continue; } @@ -4826,7 +4931,8 @@ int ust_app_enable_channel_glb(struct ltt_ust_session *usess, * Disable an event in a channel and for a specific session. */ int ust_app_disable_event_glb(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent) + struct ltt_ust_channel *uchan, + struct ltt_ust_event *uevent) { int ret = 0; struct lttng_ht_iter iter, uiter; @@ -4838,13 +4944,15 @@ int ust_app_disable_event_glb(struct ltt_ust_session *usess, LTTNG_ASSERT(usess->active); DBG("UST app disabling event %s for all apps in channel " - "%s for session id %" PRIu64, - uevent->attr.name, uchan->name, usess->id); + "%s for session id %" PRIu64, + uevent->attr.name, + uchan->name, + usess->id); rcu_read_lock(); /* For all registered applications */ - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { if (!app->compatible) { /* * TODO: In time, we should notice the caller of this error by @@ -4853,27 +4961,35 @@ int ust_app_disable_event_glb(struct ltt_ust_session *usess, continue; } ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { /* Next app */ continue; } /* Lookup channel in the ust app session */ - lttng_ht_lookup(ua_sess->channels, (void *)uchan->name, &uiter); + lttng_ht_lookup(ua_sess->channels, (void *) uchan->name, &uiter); ua_chan_node = lttng_ht_iter_get_node_str(&uiter); - if (ua_chan_node == NULL) { + if (ua_chan_node == nullptr) { DBG2("Channel %s not found in session id %" PRIu64 " for app pid %d." - "Skipping", uchan->name, usess->id, app->pid); + "Skipping", + uchan->name, + usess->id, + app->pid); continue; } - ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node); + ua_chan = lttng::utils::container_of(ua_chan_node, &ust_app_channel::node); - ua_event = find_ust_app_event(ua_chan->events, uevent->attr.name, - uevent->filter, uevent->attr.loglevel, - uevent->exclusion); - if (ua_event == NULL) { + ua_event = find_ust_app_event(ua_chan->events, + uevent->attr.name, + uevent->filter, + uevent->attr.loglevel, + uevent->exclusion); + if (ua_event == nullptr) { DBG2("Event %s not found in channel %s for app pid %d." - "Skipping", uevent->attr.name, uchan->name, app->pid); + "Skipping", + uevent->attr.name, + uchan->name, + app->pid); continue; } @@ -4889,47 +5005,42 @@ int ust_app_disable_event_glb(struct ltt_ust_session *usess, } /* The ua_sess lock must be held by the caller. */ -static -int ust_app_channel_create(struct ltt_ust_session *usess, - struct ust_app_session *ua_sess, - struct ltt_ust_channel *uchan, struct ust_app *app, - struct ust_app_channel **_ua_chan) +static int ust_app_channel_create(struct ltt_ust_session *usess, + struct ust_app_session *ua_sess, + struct ltt_ust_channel *uchan, + struct ust_app *app, + struct ust_app_channel **_ua_chan) { int ret = 0; - struct ust_app_channel *ua_chan = NULL; + struct ust_app_channel *ua_chan = nullptr; LTTNG_ASSERT(ua_sess); ASSERT_LOCKED(ua_sess->lock); - if (!strncmp(uchan->name, DEFAULT_METADATA_NAME, - sizeof(uchan->name))) { - copy_channel_attr_to_ustctl(&ua_sess->metadata_attr, - &uchan->attr); + if (!strncmp(uchan->name, DEFAULT_METADATA_NAME, sizeof(uchan->name))) { + copy_channel_attr_to_ustctl(&ua_sess->metadata_attr, &uchan->attr); ret = 0; } else { - struct ltt_ust_context *uctx = NULL; + struct ltt_ust_context *uctx = nullptr; /* * Create channel onto application and synchronize its * configuration. */ - ret = ust_app_channel_allocate(ua_sess, uchan, - LTTNG_UST_ABI_CHAN_PER_CPU, usess, - &ua_chan); + ret = ust_app_channel_allocate( + ua_sess, uchan, LTTNG_UST_ABI_CHAN_PER_CPU, usess, &ua_chan); if (ret < 0) { goto error; } - ret = ust_app_channel_send(app, usess, - ua_sess, ua_chan); + ret = ust_app_channel_send(app, usess, ua_sess, ua_chan); if (ret) { goto error; } /* Add contexts. */ - cds_list_for_each_entry(uctx, &uchan->ctx_list, list) { - ret = create_ust_app_channel_context(ua_chan, - &uctx->ctx, app); + cds_list_for_each_entry (uctx, &uchan->ctx_list, list) { + ret = create_ust_app_channel_context(ua_chan, &uctx->ctx, app); if (ret) { goto error; } @@ -4945,7 +5056,7 @@ error: * or a timeout on it. We can't inform the caller that for a * specific app, the session failed so lets continue here. */ - ret = 0; /* Not an error. */ + ret = 0; /* Not an error. */ break; case -ENOMEM: default: @@ -4968,7 +5079,8 @@ error: * Enable event for a specific session and channel on the tracer. */ int ust_app_enable_event_glb(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent) + struct ltt_ust_channel *uchan, + struct ltt_ust_event *uevent) { int ret = 0; struct lttng_ht_iter iter, uiter; @@ -4980,7 +5092,8 @@ int ust_app_enable_event_glb(struct ltt_ust_session *usess, LTTNG_ASSERT(usess->active); DBG("UST app enabling event %s for all apps for session id %" PRIu64, - uevent->attr.name, usess->id); + uevent->attr.name, + usess->id); /* * NOTE: At this point, this function is called only if the session and @@ -4991,7 +5104,7 @@ int ust_app_enable_event_glb(struct ltt_ust_session *usess, rcu_read_lock(); /* For all registered applications */ - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { if (!app->compatible) { /* * TODO: In time, we should notice the caller of this error by @@ -5013,7 +5126,7 @@ int ust_app_enable_event_glb(struct ltt_ust_session *usess, } /* Lookup channel in the ust app session */ - lttng_ht_lookup(ua_sess->channels, (void *)uchan->name, &uiter); + lttng_ht_lookup(ua_sess->channels, (void *) uchan->name, &uiter); ua_chan_node = lttng_ht_iter_get_node_str(&uiter); /* * It is possible that the channel cannot be found is @@ -5025,14 +5138,19 @@ int ust_app_enable_event_glb(struct ltt_ust_session *usess, continue; } - ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node); + ua_chan = lttng::utils::container_of(ua_chan_node, &ust_app_channel::node); /* Get event node */ - ua_event = find_ust_app_event(ua_chan->events, uevent->attr.name, - uevent->filter, uevent->attr.loglevel, uevent->exclusion); - if (ua_event == NULL) { + ua_event = find_ust_app_event(ua_chan->events, + uevent->attr.name, + uevent->filter, + uevent->attr.loglevel, + uevent->exclusion); + if (ua_event == nullptr) { DBG3("UST app enable event %s not found for app PID %d." - "Skipping app", uevent->attr.name, app->pid); + "Skipping app", + uevent->attr.name, + app->pid); goto next_app; } @@ -5055,7 +5173,8 @@ error: * all registered apps. */ int ust_app_create_event_glb(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent) + struct ltt_ust_channel *uchan, + struct ltt_ust_event *uevent) { int ret = 0; struct lttng_ht_iter iter, uiter; @@ -5066,12 +5185,13 @@ int ust_app_create_event_glb(struct ltt_ust_session *usess, LTTNG_ASSERT(usess->active); DBG("UST app creating event %s for all apps for session id %" PRIu64, - uevent->attr.name, usess->id); + uevent->attr.name, + usess->id); rcu_read_lock(); /* For all registered applications */ - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { if (!app->compatible) { /* * TODO: In time, we should notice the caller of this error by @@ -5093,12 +5213,12 @@ int ust_app_create_event_glb(struct ltt_ust_session *usess, } /* Lookup channel in the ust app session */ - lttng_ht_lookup(ua_sess->channels, (void *)uchan->name, &uiter); + lttng_ht_lookup(ua_sess->channels, (void *) uchan->name, &uiter); ua_chan_node = lttng_ht_iter_get_node_str(&uiter); /* If the channel is not found, there is a code flow error */ LTTNG_ASSERT(ua_chan_node); - ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node); + ua_chan = lttng::utils::container_of(ua_chan_node, &ust_app_channel::node); ret = create_ust_app_event(ua_chan, uevent, app); pthread_mutex_unlock(&ua_sess->lock); @@ -5108,7 +5228,8 @@ int ust_app_create_event_glb(struct ltt_ust_session *usess, break; } DBG2("UST app event %s already exist on app PID %d", - uevent->attr.name, app->pid); + uevent->attr.name, + app->pid); continue; } } @@ -5123,8 +5244,7 @@ int ust_app_create_event_glb(struct ltt_ust_session *usess, * Called with UST app session lock held. * */ -static -int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) +static int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) { int ret = 0; struct ust_app_session *ua_sess; @@ -5138,7 +5258,7 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) } ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { /* The session is in teardown process. Ignore and continue. */ goto end; } @@ -5170,25 +5290,29 @@ skip_setup: if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app start session failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); pthread_mutex_unlock(&ua_sess->lock); goto end; } else if (ret == -EAGAIN) { WARN("UST app start session failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); pthread_mutex_unlock(&ua_sess->lock); goto end; } else { ERR("UST app start session failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } goto error_unlock; } /* Indicate that the session has been started once */ - ua_sess->started = 1; - ua_sess->enabled = 1; + ua_sess->started = true; + ua_sess->enabled = true; pthread_mutex_unlock(&ua_sess->lock); @@ -5201,13 +5325,17 @@ skip_setup: if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app wait quiescent failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app wait quiescent failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app wait quiescent failed with ret %d: pid %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } } @@ -5226,8 +5354,7 @@ error_unlock: /* * Stop tracing for a specific UST session and app. */ -static -int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) +static int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) { int ret = 0; struct ust_app_session *ua_sess; @@ -5241,7 +5368,7 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) } ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { goto end_no_session; } @@ -5271,22 +5398,26 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app stop session failed. Application is dead: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); goto end_unlock; } else if (ret == -EAGAIN) { WARN("UST app stop session failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); goto end_unlock; } else { ERR("UST app stop session failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } goto error_rcu_unlock; } health_code_update(); - ua_sess->enabled = 0; + ua_sess->enabled = false; /* Quiescent wait after stopping trace */ pthread_mutex_lock(&app->sock_lock); @@ -5295,13 +5426,17 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app wait quiescent failed. Application is dead: pid= %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app wait quiescent failed. Communication time out: pid= %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app wait quiescent failed with ret %d: pid= %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } } @@ -5331,9 +5466,7 @@ error_rcu_unlock: return -1; } -static -int ust_app_flush_app_session(struct ust_app *app, - struct ust_app_session *ua_sess) +static int ust_app_flush_app_session(struct ust_app *app, struct ust_app_session *ua_sess) { int ret, retval = 0; struct lttng_ht_iter iter; @@ -5357,14 +5490,12 @@ int ust_app_flush_app_session(struct ust_app *app, health_code_update(); /* Flushing buffers */ - socket = consumer_find_socket_by_bitness(app->abi.bits_per_long, - ua_sess->consumer); + socket = consumer_find_socket_by_bitness(app->abi.bits_per_long, ua_sess->consumer); /* Flush buffers and push metadata. */ switch (ua_sess->buffer_type) { case LTTNG_BUFFER_PER_PID: - cds_lfht_for_each_entry(ua_sess->channels->ht, &iter.iter, ua_chan, - node.node) { + cds_lfht_for_each_entry (ua_sess->channels->ht, &iter.iter, ua_chan, node.node) { health_code_update(); ret = consumer_flush_channel(socket, ua_chan->key); if (ret) { @@ -5395,8 +5526,7 @@ end_not_compatible: * Flush buffers for all applications for a specific UST session. * Called with UST session lock held. */ -static -int ust_app_flush_session(struct ltt_ust_session *usess) +static int ust_app_flush_session(struct ltt_ust_session *usess) { int ret = 0; @@ -5413,21 +5543,21 @@ int ust_app_flush_session(struct ltt_ust_session *usess) struct lttng_ht_iter iter; /* Flush all per UID buffers associated to that session. */ - cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) { + cds_list_for_each_entry (reg, &usess->buffer_reg_uid_list, lnode) { lsu::registry_session *ust_session_reg; struct buffer_reg_channel *buf_reg_chan; struct consumer_socket *socket; /* Get consumer socket to use to push the metadata.*/ socket = consumer_find_socket_by_bitness(reg->bits_per_long, - usess->consumer); + usess->consumer); if (!socket) { /* Ignore request if no consumer is found for the session. */ continue; } - cds_lfht_for_each_entry(reg->registry->channels->ht, &iter.iter, - buf_reg_chan, node.node) { + cds_lfht_for_each_entry ( + reg->registry->channels->ht, &iter.iter, buf_reg_chan, node.node) { /* * The following call will print error values so the return * code is of little importance because whatever happens, we @@ -5449,9 +5579,9 @@ int ust_app_flush_session(struct ltt_ust_session *usess) struct lttng_ht_iter iter; struct ust_app *app; - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { continue; } (void) ust_app_flush_app_session(app, ua_sess); @@ -5469,9 +5599,7 @@ int ust_app_flush_session(struct ltt_ust_session *usess) return ret; } -static -int ust_app_clear_quiescent_app_session(struct ust_app *app, - struct ust_app_session *ua_sess) +static int ust_app_clear_quiescent_app_session(struct ust_app *app, struct ust_app_session *ua_sess) { int ret = 0; struct lttng_ht_iter iter; @@ -5494,11 +5622,9 @@ int ust_app_clear_quiescent_app_session(struct ust_app *app, health_code_update(); - socket = consumer_find_socket_by_bitness(app->abi.bits_per_long, - ua_sess->consumer); + socket = consumer_find_socket_by_bitness(app->abi.bits_per_long, ua_sess->consumer); if (!socket) { - ERR("Failed to find consumer (%" PRIu32 ") socket", - app->abi.bits_per_long); + ERR("Failed to find consumer (%" PRIu32 ") socket", app->abi.bits_per_long); ret = -1; goto end_unlock; } @@ -5506,11 +5632,9 @@ int ust_app_clear_quiescent_app_session(struct ust_app *app, /* Clear quiescent state. */ switch (ua_sess->buffer_type) { case LTTNG_BUFFER_PER_PID: - cds_lfht_for_each_entry(ua_sess->channels->ht, &iter.iter, - ua_chan, node.node) { + cds_lfht_for_each_entry (ua_sess->channels->ht, &iter.iter, ua_chan, node.node) { health_code_update(); - ret = consumer_clear_quiescent_channel(socket, - ua_chan->key); + ret = consumer_clear_quiescent_channel(socket, ua_chan->key); if (ret) { ERR("Error clearing quiescent state for consumer channel"); ret = -1; @@ -5541,8 +5665,7 @@ end_not_compatible: * specific UST session. * Called with UST session lock held. */ -static -int ust_app_clear_quiescent_session(struct ltt_ust_session *usess) +static int ust_app_clear_quiescent_session(struct ltt_ust_session *usess) { int ret = 0; @@ -5561,13 +5684,13 @@ int ust_app_clear_quiescent_session(struct ltt_ust_session *usess) * Clear quiescent for all per UID buffers associated to * that session. */ - cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) { + cds_list_for_each_entry (reg, &usess->buffer_reg_uid_list, lnode) { struct consumer_socket *socket; struct buffer_reg_channel *buf_reg_chan; /* Get associated consumer socket.*/ - socket = consumer_find_socket_by_bitness( - reg->bits_per_long, usess->consumer); + socket = consumer_find_socket_by_bitness(reg->bits_per_long, + usess->consumer); if (!socket) { /* * Ignore request if no consumer is found for @@ -5576,8 +5699,8 @@ int ust_app_clear_quiescent_session(struct ltt_ust_session *usess) continue; } - cds_lfht_for_each_entry(reg->registry->channels->ht, - &iter.iter, buf_reg_chan, node.node) { + cds_lfht_for_each_entry ( + reg->registry->channels->ht, &iter.iter, buf_reg_chan, node.node) { /* * The following call will print error values so * the return code is of little importance @@ -5585,7 +5708,7 @@ int ust_app_clear_quiescent_session(struct ltt_ust_session *usess) * all. */ (void) consumer_clear_quiescent_channel(socket, - buf_reg_chan->consumer_key); + buf_reg_chan->consumer_key); } } break; @@ -5596,14 +5719,12 @@ int ust_app_clear_quiescent_session(struct ltt_ust_session *usess) struct lttng_ht_iter iter; struct ust_app *app; - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, - pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { continue; } - (void) ust_app_clear_quiescent_app_session(app, - ua_sess); + (void) ust_app_clear_quiescent_app_session(app, ua_sess); } break; } @@ -5638,11 +5759,11 @@ static int destroy_trace(struct ltt_ust_session *usess, struct ust_app *app) __lookup_session_by_app(usess, app, &iter); node = lttng_ht_iter_get_node_u64(&iter); - if (node == NULL) { + if (node == nullptr) { /* Session is being or is deleted. */ goto end; } - ua_sess = caa_container_of(node, struct ust_app_session, node); + ua_sess = lttng::utils::container_of(node, &ust_app_session::node); health_code_update(); destroy_app_session(app, ua_sess); @@ -5656,13 +5777,17 @@ static int destroy_trace(struct ltt_ust_session *usess, struct ust_app *app) if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app wait quiescent failed. Application is dead: pid= %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app wait quiescent failed. Communication time out: pid= %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app wait quiescent failed with ret %d: pid= %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } } end: @@ -5685,7 +5810,7 @@ int ust_app_start_trace_all(struct ltt_ust_session *usess) * Even though the start trace might fail, flag this session active so * other application coming in are started by default. */ - usess->active = 1; + usess->active = true; rcu_read_lock(); @@ -5697,7 +5822,7 @@ int ust_app_start_trace_all(struct ltt_ust_session *usess) */ (void) ust_app_clear_quiescent_session(usess); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { ust_app_global_update(usess, app); } @@ -5722,11 +5847,11 @@ int ust_app_stop_trace_all(struct ltt_ust_session *usess) * Even though the stop trace might fail, flag this session inactive so * other application coming in are not started by default. */ - usess->active = 0; + usess->active = false; rcu_read_lock(); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { ret = ust_app_stop_trace(usess, app); if (ret < 0) { /* Continue to next apps even on error */ @@ -5754,7 +5879,7 @@ int ust_app_destroy_trace_all(struct ltt_ust_session *usess) rcu_read_lock(); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { ret = destroy_trace(usess, app); if (ret < 0) { /* Continue to next apps even on error */ @@ -5768,13 +5893,11 @@ int ust_app_destroy_trace_all(struct ltt_ust_session *usess) } /* The ua_sess lock must be held by the caller. */ -static -int find_or_create_ust_app_channel( - struct ltt_ust_session *usess, - struct ust_app_session *ua_sess, - struct ust_app *app, - struct ltt_ust_channel *uchan, - struct ust_app_channel **ua_chan) +static int find_or_create_ust_app_channel(struct ltt_ust_session *usess, + struct ust_app_session *ua_sess, + struct ust_app *app, + struct ltt_ust_channel *uchan, + struct ust_app_channel **ua_chan) { int ret = 0; struct lttng_ht_iter iter; @@ -5783,8 +5906,7 @@ int find_or_create_ust_app_channel( lttng_ht_lookup(ua_sess->channels, (void *) uchan->name, &iter); ua_chan_node = lttng_ht_iter_get_node_str(&iter); if (ua_chan_node) { - *ua_chan = caa_container_of(ua_chan_node, - struct ust_app_channel, node); + *ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node); goto end; } @@ -5796,16 +5918,18 @@ end: return ret; } -static -int ust_app_channel_synchronize_event(struct ust_app_channel *ua_chan, - struct ltt_ust_event *uevent, - struct ust_app *app) +static int ust_app_channel_synchronize_event(struct ust_app_channel *ua_chan, + struct ltt_ust_event *uevent, + struct ust_app *app) { int ret = 0; - struct ust_app_event *ua_event = NULL; + struct ust_app_event *ua_event = nullptr; - ua_event = find_ust_app_event(ua_chan->events, uevent->attr.name, - uevent->filter, uevent->attr.loglevel, uevent->exclusion); + ua_event = find_ust_app_event(ua_chan->events, + uevent->attr.name, + uevent->filter, + uevent->attr.loglevel, + uevent->exclusion); if (!ua_event) { ret = create_ust_app_event(ua_chan, uevent, app); if (ret < 0) { @@ -5813,9 +5937,8 @@ int ust_app_channel_synchronize_event(struct ust_app_channel *ua_chan, } } else { if (ua_event->enabled != uevent->enabled) { - ret = uevent->enabled ? - enable_ust_app_event(ua_event, app) : - disable_ust_app_event(ua_event, app); + ret = uevent->enabled ? enable_ust_app_event(ua_event, app) : + disable_ust_app_event(ua_event, app); } } @@ -5824,14 +5947,13 @@ end: } /* Called with RCU read-side lock held. */ -static -void ust_app_synchronize_event_notifier_rules(struct ust_app *app) +static void ust_app_synchronize_event_notifier_rules(struct ust_app *app) { int ret = 0; enum lttng_error_code ret_code; enum lttng_trigger_status t_status; struct lttng_ht_iter app_trigger_iter; - struct lttng_triggers *triggers = NULL; + struct lttng_triggers *triggers = nullptr; struct ust_app_event_notifier_rule *event_notifier_rule; unsigned int count, i; @@ -5860,7 +5982,7 @@ void ust_app_synchronize_event_notifier_rules(struct ust_app *app) /* Get all triggers using uid 0 (root) */ ret_code = notification_thread_command_list_triggers( - the_notification_thread_handle, 0, &triggers); + the_notification_thread_handle, 0, &triggers); if (ret_code != LTTNG_OK) { goto end; } @@ -5887,14 +6009,13 @@ void ust_app_synchronize_event_notifier_rules(struct ust_app *app) condition = lttng_trigger_get_condition(trigger); if (lttng_condition_get_type(condition) != - LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES) { + LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES) { /* Does not apply */ continue; } - condition_status = - lttng_condition_event_rule_matches_borrow_rule_mutable( - condition, &event_rule); + condition_status = lttng_condition_event_rule_matches_borrow_rule_mutable( + condition, &event_rule); LTTNG_ASSERT(condition_status == LTTNG_CONDITION_STATUS_OK); if (lttng_event_rule_get_domain_type(event_rule) == LTTNG_DOMAIN_KERNEL) { @@ -5908,7 +6029,7 @@ void ust_app_synchronize_event_notifier_rules(struct ust_app *app) * explicitly acquiring it here. */ looked_up_event_notifier_rule = find_ust_app_event_notifier_rule( - app->token_to_event_notifier_rule_ht, token); + app->token_to_event_notifier_rule_ht, token); if (!looked_up_event_notifier_rule) { ret = create_ust_app_event_notifier_rule(trigger, app); if (ret < 0) { @@ -5920,8 +6041,9 @@ void ust_app_synchronize_event_notifier_rules(struct ust_app *app) rcu_read_lock(); /* Remove all unknown event sources from the app. */ cds_lfht_for_each_entry (app->token_to_event_notifier_rule_ht->ht, - &app_trigger_iter.iter, event_notifier_rule, - node.node) { + &app_trigger_iter.iter, + event_notifier_rule, + node.node) { const uint64_t app_token = event_notifier_rule->token; bool found = false; @@ -5932,13 +6054,11 @@ void ust_app_synchronize_event_notifier_rules(struct ust_app *app) for (i = 0; i < count; i++) { uint64_t notification_thread_token; const struct lttng_trigger *trigger = - lttng_triggers_get_at_index( - triggers, i); + lttng_triggers_get_at_index(triggers, i); LTTNG_ASSERT(trigger); - notification_thread_token = - lttng_trigger_get_tracer_token(trigger); + notification_thread_token = lttng_trigger_get_tracer_token(trigger); if (notification_thread_token == app_token) { found = true; @@ -5955,15 +6075,13 @@ void ust_app_synchronize_event_notifier_rules(struct ust_app *app) * This trigger was unregistered, disable it on the tracer's * side. */ - ret = lttng_ht_del(app->token_to_event_notifier_rule_ht, - &app_trigger_iter); + ret = lttng_ht_del(app->token_to_event_notifier_rule_ht, &app_trigger_iter); LTTNG_ASSERT(ret == 0); /* Callee logs errors. */ (void) disable_ust_object(app, event_notifier_rule->obj); - delete_ust_app_event_notifier_rule( - app->sock, event_notifier_rule, app); + delete_ust_app_event_notifier_rule(app->sock, event_notifier_rule, app); } rcu_read_unlock(); @@ -5976,10 +6094,9 @@ end: /* * RCU read lock must be held by the caller. */ -static -void ust_app_synchronize_all_channels(struct ltt_ust_session *usess, - struct ust_app_session *ua_sess, - struct ust_app *app) +static void ust_app_synchronize_all_channels(struct ltt_ust_session *usess, + struct ust_app_session *ua_sess, + struct ust_app *app) { int ret = 0; struct cds_lfht_iter uchan_iter; @@ -5990,8 +6107,7 @@ void ust_app_synchronize_all_channels(struct ltt_ust_session *usess, LTTNG_ASSERT(app); ASSERT_RCU_READ_LOCKED(); - cds_lfht_for_each_entry(usess->domain_global.channels->ht, &uchan_iter, - uchan, node.node) { + cds_lfht_for_each_entry (usess->domain_global.channels->ht, &uchan_iter, uchan, node.node) { struct ust_app_channel *ua_chan; struct cds_lfht_iter uevent_iter; struct ltt_ust_event *uevent; @@ -6003,8 +6119,7 @@ void ust_app_synchronize_all_channels(struct ltt_ust_session *usess, * allocated (if necessary) and sent to the application, and * all enabled contexts will be added to the channel. */ - ret = find_or_create_ust_app_channel(usess, ua_sess, - app, uchan, &ua_chan); + ret = find_or_create_ust_app_channel(usess, ua_sess, app, uchan, &ua_chan); if (ret) { /* Tracer is probably gone or ENOMEM. */ goto end; @@ -6015,19 +6130,16 @@ void ust_app_synchronize_all_channels(struct ltt_ust_session *usess, continue; } - cds_lfht_for_each_entry(uchan->events->ht, &uevent_iter, uevent, - node.node) { - ret = ust_app_channel_synchronize_event(ua_chan, - uevent, app); + cds_lfht_for_each_entry (uchan->events->ht, &uevent_iter, uevent, node.node) { + ret = ust_app_channel_synchronize_event(ua_chan, uevent, app); if (ret) { goto end; } } if (ua_chan->enabled != uchan->enabled) { - ret = uchan->enabled ? - enable_ust_app_channel(ua_sess, uchan, app) : - disable_ust_app_channel(ua_sess, ua_chan, app); + ret = uchan->enabled ? enable_ust_app_channel(ua_sess, uchan, app) : + disable_ust_app_channel(ua_sess, ua_chan, app); if (ret) { goto end; } @@ -6041,12 +6153,10 @@ end: * The caller must ensure that the application is compatible and is tracked * by the process attribute trackers. */ -static -void ust_app_synchronize(struct ltt_ust_session *usess, - struct ust_app *app) +static void ust_app_synchronize(struct ltt_ust_session *usess, struct ust_app *app) { int ret = 0; - struct ust_app_session *ua_sess = NULL; + struct ust_app_session *ua_sess = nullptr; /* * The application's configuration should only be synchronized for @@ -6054,7 +6164,7 @@ void ust_app_synchronize(struct ltt_ust_session *usess, */ LTTNG_ASSERT(usess->active); - ret = find_or_create_ust_app_session(usess, app, &ua_sess, NULL); + ret = find_or_create_ust_app_session(usess, app, &ua_sess, nullptr); if (ret < 0) { /* Tracer is probably gone or ENOMEM. */ if (ua_sess) { @@ -6085,7 +6195,8 @@ void ust_app_synchronize(struct ltt_ust_session *usess, ret = create_ust_app_metadata(ua_sess, app, usess->consumer); if (ret < 0) { ERR("Metadata creation failed for app sock %d for session id %" PRIu64, - app->sock, usess->id); + app->sock, + usess->id); } rcu_read_unlock(); @@ -6096,13 +6207,12 @@ end: return; } -static -void ust_app_global_destroy(struct ltt_ust_session *usess, struct ust_app *app) +static void ust_app_global_destroy(struct ltt_ust_session *usess, struct ust_app *app) { struct ust_app_session *ua_sess; ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { return; } destroy_app_session(app, ua_sess); @@ -6120,20 +6230,14 @@ void ust_app_global_update(struct ltt_ust_session *usess, struct ust_app *app) LTTNG_ASSERT(usess->active); ASSERT_RCU_READ_LOCKED(); - DBG2("UST app global update for app sock %d for session id %" PRIu64, - app->sock, usess->id); + DBG2("UST app global update for app sock %d for session id %" PRIu64, app->sock, usess->id); if (!app->compatible) { return; } - if (trace_ust_id_tracker_lookup(LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID, - usess, app->pid) && - trace_ust_id_tracker_lookup( - LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID, - usess, app->uid) && - trace_ust_id_tracker_lookup( - LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID, - usess, app->gid)) { + if (trace_ust_id_tracker_lookup(LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID, usess, app->pid) && + trace_ust_id_tracker_lookup(LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID, usess, app->uid) && + trace_ust_id_tracker_lookup(LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID, usess, app->gid)) { /* * Synchronize the application's internal tracing configuration * and start tracing. @@ -6156,15 +6260,17 @@ void ust_app_global_update_event_notifier_rules(struct ust_app *app) ASSERT_RCU_READ_LOCKED(); DBG2("UST application global event notifier rules update: app = '%s', pid = %d", - app->name, app->pid); + app->name, + app->pid); if (!app->compatible || !ust_app_supports_notifiers(app)) { return; } - if (app->event_notifier_group.object == NULL) { + if (app->event_notifier_group.object == nullptr) { WARN("UST app global update of event notifiers for app skipped since communication handle is null: app = '%s', pid = %d", - app->name, app->pid); + app->name, + app->pid); return; } @@ -6180,19 +6286,19 @@ void ust_app_global_update_all(struct ltt_ust_session *usess) struct ust_app *app; rcu_read_lock(); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { ust_app_global_update(usess, app); } rcu_read_unlock(); } -void ust_app_global_update_all_event_notifier_rules(void) +void ust_app_global_update_all_event_notifier_rules() { struct lttng_ht_iter iter; struct ust_app *app; rcu_read_lock(); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { ust_app_global_update_event_notifier_rules(app); } @@ -6203,19 +6309,20 @@ void ust_app_global_update_all_event_notifier_rules(void) * Add context to a specific channel for global UST domain. */ int ust_app_add_ctx_channel_glb(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan, struct ltt_ust_context *uctx) + struct ltt_ust_channel *uchan, + struct ltt_ust_context *uctx) { int ret = 0; struct lttng_ht_node_str *ua_chan_node; struct lttng_ht_iter iter, uiter; - struct ust_app_channel *ua_chan = NULL; + struct ust_app_channel *ua_chan = nullptr; struct ust_app_session *ua_sess; struct ust_app *app; LTTNG_ASSERT(usess->active); rcu_read_lock(); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { if (!app->compatible) { /* * TODO: In time, we should notice the caller of this error by @@ -6224,7 +6331,7 @@ int ust_app_add_ctx_channel_glb(struct ltt_ust_session *usess, continue; } ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { continue; } @@ -6236,13 +6343,12 @@ int ust_app_add_ctx_channel_glb(struct ltt_ust_session *usess, } /* Lookup channel in the ust app session */ - lttng_ht_lookup(ua_sess->channels, (void *)uchan->name, &uiter); + lttng_ht_lookup(ua_sess->channels, (void *) uchan->name, &uiter); ua_chan_node = lttng_ht_iter_get_node_str(&uiter); - if (ua_chan_node == NULL) { + if (ua_chan_node == nullptr) { goto next_app; } - ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, - node); + ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node); ret = create_ust_app_channel_context(ua_chan, &uctx->ctx, app); if (ret < 0) { goto next_app; @@ -6267,16 +6373,22 @@ int ust_app_recv_registration(int sock, struct ust_register_msg *msg) LTTNG_ASSERT(msg); - ret = lttng_ust_ctl_recv_reg_msg(sock, &msg->type, &msg->major, &msg->minor, - &pid, &ppid, &uid, &gid, - &msg->bits_per_long, - &msg->uint8_t_alignment, - &msg->uint16_t_alignment, - &msg->uint32_t_alignment, - &msg->uint64_t_alignment, - &msg->long_alignment, - &msg->byte_order, - msg->name); + ret = lttng_ust_ctl_recv_reg_msg(sock, + &msg->type, + &msg->major, + &msg->minor, + &pid, + &ppid, + &uid, + &gid, + &msg->bits_per_long, + &msg->uint8_t_alignment, + &msg->uint16_t_alignment, + &msg->uint32_t_alignment, + &msg->uint64_t_alignment, + &msg->long_alignment, + &msg->byte_order, + msg->name); if (ret < 0) { switch (-ret) { case EPIPE: @@ -6286,8 +6398,10 @@ int ust_app_recv_registration(int sock, struct ust_register_msg *msg) break; case LTTNG_UST_ERR_UNSUP_MAJOR: ERR("UST app recv reg unsupported version %d.%d. Supporting %d.%d", - msg->major, msg->minor, LTTNG_UST_ABI_MAJOR_VERSION, - LTTNG_UST_ABI_MINOR_VERSION); + msg->major, + msg->minor, + LTTNG_UST_ABI_MAJOR_VERSION, + LTTNG_UST_ABI_MINOR_VERSION); break; default: ERR("UST app recv reg message failed with ret %d", ret); @@ -6308,25 +6422,24 @@ error: * Return a ust app session object using the application object and the * session object descriptor has a key. If not found, NULL is returned. * A RCU read side lock MUST be acquired when calling this function. -*/ -static struct ust_app_session *find_session_by_objd(struct ust_app *app, - int objd) + */ +static struct ust_app_session *find_session_by_objd(struct ust_app *app, int objd) { struct lttng_ht_node_ulong *node; struct lttng_ht_iter iter; - struct ust_app_session *ua_sess = NULL; + struct ust_app_session *ua_sess = nullptr; LTTNG_ASSERT(app); ASSERT_RCU_READ_LOCKED(); - lttng_ht_lookup(app->ust_sessions_objd, (void *)((unsigned long) objd), &iter); + lttng_ht_lookup(app->ust_sessions_objd, (void *) ((unsigned long) objd), &iter); node = lttng_ht_iter_get_node_ulong(&iter); - if (node == NULL) { + if (node == nullptr) { DBG2("UST app session find by objd %d not found", objd); goto error; } - ua_sess = caa_container_of(node, struct ust_app_session, ust_objd_node); + ua_sess = lttng::utils::container_of(node, &ust_app_session::ust_objd_node); error: return ua_sess; @@ -6337,24 +6450,23 @@ error: * object descriptor has a key. If not found, NULL is returned. A RCU read side * lock MUST be acquired before calling this function. */ -static struct ust_app_channel *find_channel_by_objd(struct ust_app *app, - int objd) +static struct ust_app_channel *find_channel_by_objd(struct ust_app *app, int objd) { struct lttng_ht_node_ulong *node; struct lttng_ht_iter iter; - struct ust_app_channel *ua_chan = NULL; + struct ust_app_channel *ua_chan = nullptr; LTTNG_ASSERT(app); ASSERT_RCU_READ_LOCKED(); - lttng_ht_lookup(app->ust_objd, (void *)((unsigned long) objd), &iter); + lttng_ht_lookup(app->ust_objd, (void *) ((unsigned long) objd), &iter); node = lttng_ht_iter_get_node_ulong(&iter); - if (node == NULL) { + if (node == nullptr) { DBG2("UST app channel find by objd %d not found", objd); goto error; } - ua_chan = caa_container_of(node, struct ust_app_channel, ust_objd_node); + ua_chan = lttng::utils::container_of(node, &ust_app_channel::ust_objd_node); error: return ua_chan; @@ -6369,9 +6481,9 @@ error: * On success 0 is returned else a negative value. */ static int handle_app_register_channel_notification(int sock, - int cobjd, - struct lttng_ust_ctl_field *raw_context_fields, - size_t context_field_count) + int cobjd, + struct lttng_ust_ctl_field *raw_context_fields, + size_t context_field_count) { int ret, ret_code = 0; uint32_t chan_id; @@ -6379,16 +6491,15 @@ static int handle_app_register_channel_notification(int sock, struct ust_app *app; struct ust_app_channel *ua_chan; struct ust_app_session *ua_sess; - auto ust_ctl_context_fields = lttng::make_unique_wrapper( - raw_context_fields); + auto ust_ctl_context_fields = + lttng::make_unique_wrapper(raw_context_fields); lttng::urcu::read_lock_guard read_lock_guard; /* Lookup application. If not found, there is a code flow error. */ app = find_app_by_notify_sock(sock); if (!app) { - DBG("Application socket %d is being torn down. Abort event notify", - sock); + DBG("Application socket %d is being torn down. Abort event notify", sock); return -1; } @@ -6416,7 +6527,7 @@ static int handle_app_register_channel_notification(int sock, chan_reg_key = ua_chan->key; } - auto& ust_reg_chan = locked_registry_session->get_channel(chan_reg_key); + auto& ust_reg_chan = locked_registry_session->channel(chan_reg_key); /* Channel id is set during the object creation. */ chan_id = ust_reg_chan.id; @@ -6434,54 +6545,80 @@ static int handle_app_register_channel_notification(int sock, * that all apps provide the same typing for the context fields as a * sanity check. */ - lst::type::cuptr context_fields = lttng::make_unique(0, - lsu::create_trace_fields_from_ust_ctl_fields(*locked_registry_session, - ust_ctl_context_fields.get(), context_field_count)); + try { + auto app_context_fields = lsu::create_trace_fields_from_ust_ctl_fields( + *locked_registry_session, + ust_ctl_context_fields.get(), + context_field_count, + lst::field_location::root::EVENT_RECORD_COMMON_CONTEXT, + lsu::ctl_field_quirks::UNDERSCORE_PREFIXED_VARIANT_TAG_MAPPINGS); + + if (!ust_reg_chan.is_registered()) { + lst::type::cuptr event_context = app_context_fields.size() ? + lttng::make_unique( + 0, std::move(app_context_fields)) : + nullptr; + + ust_reg_chan.event_context(std::move(event_context)); + } else { + /* + * Validate that the context fields match between + * registry and newcoming application. + */ + bool context_fields_match; + const auto *previous_event_context = ust_reg_chan.event_context(); - if (!ust_reg_chan.is_registered()) { - ust_reg_chan.set_context(std::move(context_fields)); - } else { - /* - * Validate that the context fields match between - * registry and newcoming application. - */ - if (ust_reg_chan.get_context() != *context_fields) { - ERR("Registering application channel due to context field mismatch: pid = %d, sock = %d", - app->pid, app->sock); - ret_code = -EINVAL; - goto reply; - } - } + if (!previous_event_context) { + context_fields_match = app_context_fields.size() == 0; + } else { + const lst::structure_type app_event_context_struct( + 0, std::move(app_context_fields)); + + context_fields_match = *previous_event_context == + app_event_context_struct; + } - /* Append to metadata */ - if (!ust_reg_chan._metadata_dumped) { - /*ret_code = ust_metadata_channel_statedump(registry, ust_reg_chan);*/ - if (ret_code) { - ERR("Error appending channel metadata (errno = %d)", ret_code); - goto reply; + if (!context_fields_match) { + ERR("Registering application channel due to context field mismatch: pid = %d, sock = %d", + app->pid, + app->sock); + ret_code = -EINVAL; + goto reply; + } } + } catch (std::exception& ex) { + ERR("Failed to handle application context: %s", ex.what()); + ret_code = -EINVAL; + goto reply; } reply: - DBG3("UST app replying to register channel key %" PRIu64 - " with id %u, ret = %d", chan_reg_key, chan_id, - ret_code); - - ret = lttng_ust_ctl_reply_register_channel(sock, chan_id, - ust_reg_chan.header_type == lst::stream_class::header_type::COMPACT ? - LTTNG_UST_CTL_CHANNEL_HEADER_COMPACT : - LTTNG_UST_CTL_CHANNEL_HEADER_LARGE, - ret_code); + DBG3("UST app replying to register channel key %" PRIu64 " with id %u, ret = %d", + chan_reg_key, + chan_id, + ret_code); + + ret = lttng_ust_ctl_reply_register_channel( + sock, + chan_id, + ust_reg_chan.header_type_ == lst::stream_class::header_type::COMPACT ? + LTTNG_UST_CTL_CHANNEL_HEADER_COMPACT : + LTTNG_UST_CTL_CHANNEL_HEADER_LARGE, + ret_code); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app reply channel failed. Application died: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app reply channel failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app reply channel failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } return ret; @@ -6502,9 +6639,15 @@ reply: * * On success 0 is returned else a negative value. */ -static int add_event_ust_registry(int sock, int sobjd, int cobjd, const char *name, - char *raw_signature, size_t nr_fields, struct lttng_ust_ctl_field *raw_fields, - int loglevel_value, char *raw_model_emf_uri) +static int add_event_ust_registry(int sock, + int sobjd, + int cobjd, + const char *name, + char *raw_signature, + size_t nr_fields, + struct lttng_ust_ctl_field *raw_fields, + int loglevel_value, + char *raw_model_emf_uri) { int ret, ret_code; uint32_t event_id = 0; @@ -6520,8 +6663,7 @@ static int add_event_ust_registry(int sock, int sobjd, int cobjd, const char *na /* Lookup application. If not found, there is a code flow error. */ app = find_app_by_notify_sock(sock); if (!app) { - DBG("Application socket %d is being torn down. Abort event notify", - sock); + DBG("Application socket %d is being torn down. Abort event notify", sock); return -1; } @@ -6550,23 +6692,33 @@ static int add_event_ust_registry(int sock, int sobjd, int cobjd, const char *na * These three variables MUST NOT be read/write after this. */ try { - auto& channel = locked_registry->get_channel(chan_reg_key); + auto& channel = locked_registry->channel(chan_reg_key); /* event_id is set on success. */ - channel.add_event(sobjd, cobjd, name, signature.get(), - lsu::create_trace_fields_from_ust_ctl_fields( - *locked_registry, fields.get(), - nr_fields), - loglevel_value, - model_emf_uri.get() ? - nonstd::optional( - model_emf_uri.get()) : - nonstd::nullopt, - ua_sess->buffer_type, *app, event_id); + channel.add_event( + sobjd, + cobjd, + name, + signature.get(), + lsu::create_trace_fields_from_ust_ctl_fields( + *locked_registry, + fields.get(), + nr_fields, + lst::field_location::root::EVENT_RECORD_PAYLOAD, + lsu::ctl_field_quirks:: + UNDERSCORE_PREFIXED_VARIANT_TAG_MAPPINGS), + loglevel_value, + model_emf_uri.get() ? + nonstd::optional(model_emf_uri.get()) : + nonstd::nullopt, + ua_sess->buffer_type, + *app, + event_id); ret_code = 0; } catch (const std::exception& ex) { - ERR("Failed to add event `%s` to registry session: %s", name, - ex.what()); + ERR("Failed to add event `%s` to registry session: %s", + name, + ex.what()); /* Inform the application of the error; don't return directly. */ ret_code = -EINVAL; } @@ -6585,13 +6737,17 @@ static int add_event_ust_registry(int sock, int sobjd, int cobjd, const char *na if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app reply event failed. Application died: pid = %d, sock = %d.", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app reply event failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app reply event failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } /* * No need to wipe the create event since the application socket will @@ -6600,8 +6756,7 @@ static int add_event_ust_registry(int sock, int sobjd, int cobjd, const char *na return ret; } - DBG3("UST registry event %s with id %" PRId32 " added successfully", - name, event_id); + DBG3("UST registry event %s with id %" PRId32 " added successfully", name, event_id); return ret; } @@ -6613,26 +6768,26 @@ static int add_event_ust_registry(int sock, int sobjd, int cobjd, const char *na * * On success 0 is returned else a negative value. */ -static int add_enum_ust_registry(int sock, int sobjd, char *name, - struct lttng_ust_ctl_enum_entry *entries, size_t nr_entries) +static int add_enum_ust_registry(int sock, + int sobjd, + const char *name, + struct lttng_ust_ctl_enum_entry *raw_entries, + size_t nr_entries) { - int ret = 0, ret_code; + int ret = 0; struct ust_app *app; struct ust_app_session *ua_sess; - lsu::registry_session *registry; uint64_t enum_id = -1ULL; - - rcu_read_lock(); + lttng::urcu::read_lock_guard read_lock_guard; + auto entries = lttng::make_unique_wrapper( + raw_entries); /* Lookup application. If not found, there is a code flow error. */ app = find_app_by_notify_sock(sock); if (!app) { /* Return an error since this is not an error */ - DBG("Application socket %d is being torn down. Aborting enum registration", - sock); - free(entries); - ret = -1; - goto error_rcu_unlock; + DBG("Application socket %d is being torn down. Aborting enum registration", sock); + return -1; } /* Lookup session by UST object descriptor. */ @@ -6640,59 +6795,66 @@ static int add_enum_ust_registry(int sock, int sobjd, char *name, if (!ua_sess) { /* Return an error since this is not an error */ DBG("Application session is being torn down (session not found). Aborting enum registration."); - free(entries); - goto error_rcu_unlock; + return 0; } - registry = get_session_registry(ua_sess); - if (!registry) { + auto locked_registry = get_locked_session_registry(ua_sess); + if (!locked_registry) { DBG("Application session is being torn down (registry not found). Aborting enum registration."); - free(entries); - goto error_rcu_unlock; + return 0; } - pthread_mutex_lock(®istry->_lock); - /* * From this point on, the callee acquires the ownership of * entries. The variable entries MUST NOT be read/written after * call. */ - ret_code = ust_registry_create_or_find_enum(registry, sobjd, name, - entries, nr_entries, &enum_id); - entries = NULL; + int application_reply_code; + try { + locked_registry->create_or_find_enum( + sobjd, name, entries.release(), nr_entries, &enum_id); + application_reply_code = 0; + } catch (const std::exception& ex) { + ERR("%s: %s", + fmt::format( + "Failed to create or find enumeration provided by application: app = {}, enumeration name = {}", + *app, + name) + .c_str(), + ex.what()); + application_reply_code = -1; + } /* * The return value is returned to ustctl so in case of an error, the * application can be notified. In case of an error, it's important not to * return a negative error or else the application will get closed. */ - ret = lttng_ust_ctl_reply_register_enum(sock, enum_id, ret_code); + ret = lttng_ust_ctl_reply_register_enum(sock, enum_id, application_reply_code); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app reply enum failed. Application died: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else if (ret == -EAGAIN) { WARN("UST app reply enum failed. Communication time out: pid = %d, sock = %d", - app->pid, app->sock); + app->pid, + app->sock); } else { ERR("UST app reply enum failed with ret %d: pid = %d, sock = %d", - ret, app->pid, app->sock); + ret, + app->pid, + app->sock); } /* * No need to wipe the create enum since the application socket will * get close on error hence cleaning up everything by itself. */ - goto error; + return ret; } DBG3("UST registry enum %s added successfully or already found", name); - -error: - pthread_mutex_unlock(®istry->_lock); -error_rcu_unlock: - rcu_read_unlock(); - return ret; + return 0; } /* @@ -6710,14 +6872,11 @@ int ust_app_recv_notify(int sock) ret = lttng_ust_ctl_recv_notify(sock, &cmd); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { - DBG3("UST app recv notify failed. Application died: sock = %d", - sock); + DBG3("UST app recv notify failed. Application died: sock = %d", sock); } else if (ret == -EAGAIN) { - WARN("UST app recv notify failed. Communication time out: sock = %d", - sock); + WARN("UST app recv notify failed. Communication time out: sock = %d", sock); } else { - ERR("UST app recv notify failed with ret %d: sock = %d", - ret, sock); + ERR("UST app recv notify failed with ret %d: sock = %d", ret, sock); } goto error; } @@ -6732,18 +6891,24 @@ int ust_app_recv_notify(int sock) DBG2("UST app ustctl register event received"); - ret = lttng_ust_ctl_recv_register_event(sock, &sobjd, &cobjd, name, &loglevel_value, - &sig, &nr_fields, &fields, &model_emf_uri); + ret = lttng_ust_ctl_recv_register_event(sock, + &sobjd, + &cobjd, + name, + &loglevel_value, + &sig, + &nr_fields, + &fields, + &model_emf_uri); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app recv event failed. Application died: sock = %d", - sock); + sock); } else if (ret == -EAGAIN) { WARN("UST app recv event failed. Communication time out: sock = %d", - sock); + sock); } else { - ERR("UST app recv event failed with ret %d: sock = %d", - ret, sock); + ERR("UST app recv event failed with ret %d: sock = %d", ret, sock); } goto error; } @@ -6752,7 +6917,8 @@ int ust_app_recv_notify(int sock) lttng::urcu::read_lock_guard rcu_lock; const struct ust_app *app = find_app_by_notify_sock(sock); if (!app) { - DBG("Application socket %d is being torn down. Abort event notify", sock); + DBG("Application socket %d is being torn down. Abort event notify", + sock); ret = -1; goto error; } @@ -6760,7 +6926,8 @@ int ust_app_recv_notify(int sock) if ((!fields && nr_fields > 0) || (fields && nr_fields == 0)) { ERR("Invalid return value from lttng_ust_ctl_recv_register_event: fields = %p, nr_fields = %zu", - fields, nr_fields); + fields, + nr_fields); ret = -1; free(fields); goto error; @@ -6772,8 +6939,15 @@ int ust_app_recv_notify(int sock) * code path loses the ownsership of these variables and transfer them * to the this function. */ - ret = add_event_ust_registry(sock, sobjd, cobjd, name, sig, nr_fields, - fields, loglevel_value, model_emf_uri); + ret = add_event_ust_registry(sock, + sobjd, + cobjd, + name, + sig, + nr_fields, + fields, + loglevel_value, + model_emf_uri); if (ret < 0) { goto error; } @@ -6789,17 +6963,18 @@ int ust_app_recv_notify(int sock) DBG2("UST app ustctl register channel received"); ret = lttng_ust_ctl_recv_register_channel( - sock, &sobjd, &cobjd, &field_count, &context_fields); + sock, &sobjd, &cobjd, &field_count, &context_fields); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { DBG3("UST app recv channel failed. Application died: sock = %d", - sock); + sock); } else if (ret == -EAGAIN) { WARN("UST app recv channel failed. Communication time out: sock = %d", - sock); + sock); } else { - ERR("UST app recv channel failed with ret %d: sock = %d", ret, - sock); + ERR("UST app recv channel failed with ret %d: sock = %d", + ret, + sock); } goto error; } @@ -6809,7 +6984,8 @@ int ust_app_recv_notify(int sock) * that if needed it will be freed. After this, it's invalid to access * fields or clean them up. */ - ret = handle_app_register_channel_notification(sock, cobjd, context_fields, field_count); + ret = handle_app_register_channel_notification( + sock, cobjd, context_fields, field_count); if (ret < 0) { goto error; } @@ -6825,25 +7001,21 @@ int ust_app_recv_notify(int sock) DBG2("UST app ustctl register enum received"); - ret = lttng_ust_ctl_recv_register_enum(sock, &sobjd, name, - &entries, &nr_entries); + ret = lttng_ust_ctl_recv_register_enum(sock, &sobjd, name, &entries, &nr_entries); if (ret < 0) { if (ret == -EPIPE || ret == -LTTNG_UST_ERR_EXITING) { - DBG3("UST app recv enum failed. Application died: sock = %d", - sock); + DBG3("UST app recv enum failed. Application died: sock = %d", sock); } else if (ret == -EAGAIN) { WARN("UST app recv enum failed. Communication time out: sock = %d", - sock); + sock); } else { - ERR("UST app recv enum failed with ret %d: sock = %d", - ret, sock); + ERR("UST app recv enum failed with ret %d: sock = %d", ret, sock); } goto error; } /* Callee assumes ownership of entries. */ - ret = add_enum_ust_registry(sock, sobjd, name, - entries, nr_entries); + ret = add_enum_ust_registry(sock, sobjd, name, entries, nr_entries); if (ret < 0) { goto error; } @@ -6954,16 +7126,15 @@ void ust_app_destroy(struct ust_app *app) * * Returns LTTNG_OK on success or a LTTNG_ERR error code. */ -enum lttng_error_code ust_app_snapshot_record( - const struct ltt_ust_session *usess, - const struct consumer_output *output, - uint64_t nb_packets_per_stream) +enum lttng_error_code ust_app_snapshot_record(const struct ltt_ust_session *usess, + const struct consumer_output *output, + uint64_t nb_packets_per_stream) { int ret = 0; enum lttng_error_code status = LTTNG_OK; struct lttng_ht_iter iter; struct ust_app *app; - char *trace_path = NULL; + char *trace_path = nullptr; LTTNG_ASSERT(usess); LTTNG_ASSERT(output); @@ -6975,7 +7146,7 @@ enum lttng_error_code ust_app_snapshot_record( { struct buffer_reg_uid *reg; - cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) { + cds_list_for_each_entry (reg, &usess->buffer_reg_uid_list, lnode) { struct buffer_reg_channel *buf_reg_chan; struct consumer_socket *socket; char pathname[PATH_MAX]; @@ -6988,16 +7159,18 @@ enum lttng_error_code ust_app_snapshot_record( /* Get consumer socket to use to push the metadata.*/ socket = consumer_find_socket_by_bitness(reg->bits_per_long, - usess->consumer); + usess->consumer); if (!socket) { status = LTTNG_ERR_INVALID; goto error; } memset(pathname, 0, sizeof(pathname)); - ret = snprintf(pathname, sizeof(pathname), - DEFAULT_UST_TRACE_UID_PATH, - reg->uid, reg->bits_per_long); + ret = snprintf(pathname, + sizeof(pathname), + DEFAULT_UST_TRACE_UID_PATH, + reg->uid, + reg->bits_per_long); if (ret < 0) { PERROR("snprintf snapshot path"); status = LTTNG_ERR_INVALID; @@ -7005,26 +7178,32 @@ enum lttng_error_code ust_app_snapshot_record( } /* Free path allowed on previous iteration. */ free(trace_path); - trace_path = setup_channel_trace_path(usess->consumer, pathname, - &consumer_path_offset); + trace_path = setup_channel_trace_path( + usess->consumer, pathname, &consumer_path_offset); if (!trace_path) { status = LTTNG_ERR_INVALID; goto error; } /* Add the UST default trace dir to path. */ - cds_lfht_for_each_entry(reg->registry->channels->ht, &iter.iter, - buf_reg_chan, node.node) { - status = consumer_snapshot_channel(socket, - buf_reg_chan->consumer_key, - output, 0, &trace_path[consumer_path_offset], - nb_packets_per_stream); + cds_lfht_for_each_entry ( + reg->registry->channels->ht, &iter.iter, buf_reg_chan, node.node) { + status = + consumer_snapshot_channel(socket, + buf_reg_chan->consumer_key, + output, + 0, + &trace_path[consumer_path_offset], + nb_packets_per_stream); if (status != LTTNG_OK) { goto error; } } status = consumer_snapshot_channel(socket, - reg->registry->reg.ust->_metadata_key, output, 1, - &trace_path[consumer_path_offset], 0); + reg->registry->reg.ust->_metadata_key, + output, + 1, + &trace_path[consumer_path_offset], + 0); if (status != LTTNG_OK) { goto error; } @@ -7033,7 +7212,7 @@ enum lttng_error_code ust_app_snapshot_record( } case LTTNG_BUFFER_PER_PID: { - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct consumer_socket *socket; struct lttng_ht_iter chan_iter; struct ust_app_channel *ua_chan; @@ -7049,8 +7228,7 @@ enum lttng_error_code ust_app_snapshot_record( } /* Get the right consumer socket for the application. */ - socket = consumer_find_socket_by_bitness(app->abi.bits_per_long, - output); + socket = consumer_find_socket_by_bitness(app->abi.bits_per_long, output); if (!socket) { status = LTTNG_ERR_INVALID; goto error; @@ -7058,8 +7236,7 @@ enum lttng_error_code ust_app_snapshot_record( /* Add the UST default trace dir to path. */ memset(pathname, 0, sizeof(pathname)); - ret = snprintf(pathname, sizeof(pathname), "%s", - ua_sess->path); + ret = snprintf(pathname, sizeof(pathname), "%s", ua_sess->path); if (ret < 0) { status = LTTNG_ERR_INVALID; PERROR("snprintf snapshot path"); @@ -7067,18 +7244,21 @@ enum lttng_error_code ust_app_snapshot_record( } /* Free path allowed on previous iteration. */ free(trace_path); - trace_path = setup_channel_trace_path(usess->consumer, pathname, - &consumer_path_offset); + trace_path = setup_channel_trace_path( + usess->consumer, pathname, &consumer_path_offset); if (!trace_path) { status = LTTNG_ERR_INVALID; goto error; } - cds_lfht_for_each_entry(ua_sess->channels->ht, &chan_iter.iter, - ua_chan, node.node) { - status = consumer_snapshot_channel(socket, - ua_chan->key, output, 0, - &trace_path[consumer_path_offset], - nb_packets_per_stream); + cds_lfht_for_each_entry ( + ua_sess->channels->ht, &chan_iter.iter, ua_chan, node.node) { + status = + consumer_snapshot_channel(socket, + ua_chan->key, + output, + 0, + &trace_path[consumer_path_offset], + nb_packets_per_stream); switch (status) { case LTTNG_OK: break; @@ -7095,8 +7275,11 @@ enum lttng_error_code ust_app_snapshot_record( continue; } status = consumer_snapshot_channel(socket, - registry->_metadata_key, output, 1, - &trace_path[consumer_path_offset], 0); + registry->_metadata_key, + output, + 1, + &trace_path[consumer_path_offset], + 0); switch (status) { case LTTNG_OK: break; @@ -7122,8 +7305,8 @@ error: /* * Return the size taken by one more packet per stream. */ -uint64_t ust_app_get_size_one_more_packet_per_stream( - const struct ltt_ust_session *usess, uint64_t cur_nr_packets) +uint64_t ust_app_get_size_one_more_packet_per_stream(const struct ltt_ust_session *usess, + uint64_t cur_nr_packets) { uint64_t tot_size = 0; struct ust_app *app; @@ -7136,12 +7319,12 @@ uint64_t ust_app_get_size_one_more_packet_per_stream( { struct buffer_reg_uid *reg; - cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) { + cds_list_for_each_entry (reg, &usess->buffer_reg_uid_list, lnode) { struct buffer_reg_channel *buf_reg_chan; rcu_read_lock(); - cds_lfht_for_each_entry(reg->registry->channels->ht, &iter.iter, - buf_reg_chan, node.node) { + cds_lfht_for_each_entry ( + reg->registry->channels->ht, &iter.iter, buf_reg_chan, node.node) { if (cur_nr_packets >= buf_reg_chan->num_subbuf) { /* * Don't take channel into account if we @@ -7158,7 +7341,7 @@ uint64_t ust_app_get_size_one_more_packet_per_stream( case LTTNG_BUFFER_PER_PID: { rcu_read_lock(); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct ust_app_channel *ua_chan; struct ust_app_session *ua_sess; struct lttng_ht_iter chan_iter; @@ -7169,8 +7352,8 @@ uint64_t ust_app_get_size_one_more_packet_per_stream( continue; } - cds_lfht_for_each_entry(ua_sess->channels->ht, &chan_iter.iter, - ua_chan, node.node) { + cds_lfht_for_each_entry ( + ua_sess->channels->ht, &chan_iter.iter, ua_chan, node.node) { if (cur_nr_packets >= ua_chan->attr.num_subbuf) { /* * Don't take channel into account if we @@ -7193,9 +7376,12 @@ uint64_t ust_app_get_size_one_more_packet_per_stream( } int ust_app_uid_get_channel_runtime_stats(uint64_t ust_session_id, - struct cds_list_head *buffer_reg_uid_list, - struct consumer_output *consumer, uint64_t uchan_id, - int overwrite, uint64_t *discarded, uint64_t *lost) + struct cds_list_head *buffer_reg_uid_list, + struct consumer_output *consumer, + uint64_t uchan_id, + int overwrite, + uint64_t *discarded, + uint64_t *lost) { int ret; uint64_t consumer_chan_key; @@ -7204,7 +7390,7 @@ int ust_app_uid_get_channel_runtime_stats(uint64_t ust_session_id, *lost = 0; ret = buffer_reg_uid_consumer_channel_key( - buffer_reg_uid_list, uchan_id, &consumer_chan_key); + buffer_reg_uid_list, uchan_id, &consumer_chan_key); if (ret < 0) { /* Not found */ ret = 0; @@ -7212,11 +7398,10 @@ int ust_app_uid_get_channel_runtime_stats(uint64_t ust_session_id, } if (overwrite) { - ret = consumer_get_lost_packets(ust_session_id, - consumer_chan_key, consumer, lost); + ret = consumer_get_lost_packets(ust_session_id, consumer_chan_key, consumer, lost); } else { - ret = consumer_get_discarded_events(ust_session_id, - consumer_chan_key, consumer, discarded); + ret = consumer_get_discarded_events( + ust_session_id, consumer_chan_key, consumer, discarded); } end: @@ -7224,9 +7409,11 @@ end: } int ust_app_pid_get_channel_runtime_stats(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan, - struct consumer_output *consumer, int overwrite, - uint64_t *discarded, uint64_t *lost) + struct ltt_ust_channel *uchan, + struct consumer_output *consumer, + int overwrite, + uint64_t *discarded, + uint64_t *lost) { int ret = 0; struct lttng_ht_iter iter; @@ -7243,11 +7430,11 @@ int ust_app_pid_get_channel_runtime_stats(struct ltt_ust_session *usess, * Iterate over every registered applications. Sum counters for * all applications containing requested session and channel. */ - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct lttng_ht_iter uiter; ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { continue; } @@ -7257,13 +7444,12 @@ int ust_app_pid_get_channel_runtime_stats(struct ltt_ust_session *usess, /* If the session is found for the app, the channel must be there */ LTTNG_ASSERT(ua_chan_node); - ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node); + ua_chan = lttng::utils::container_of(ua_chan_node, &ust_app_channel::node); if (overwrite) { uint64_t _lost; - ret = consumer_get_lost_packets(usess->id, ua_chan->key, - consumer, &_lost); + ret = consumer_get_lost_packets(usess->id, ua_chan->key, consumer, &_lost); if (ret < 0) { break; } @@ -7271,8 +7457,8 @@ int ust_app_pid_get_channel_runtime_stats(struct ltt_ust_session *usess, } else { uint64_t _discarded; - ret = consumer_get_discarded_events(usess->id, - ua_chan->key, consumer, &_discarded); + ret = consumer_get_discarded_events( + usess->id, ua_chan->key, consumer, &_discarded); if (ret < 0) { break; } @@ -7284,9 +7470,7 @@ int ust_app_pid_get_channel_runtime_stats(struct ltt_ust_session *usess, return ret; } -static -int ust_app_regenerate_statedump(struct ltt_ust_session *usess, - struct ust_app *app) +static int ust_app_regenerate_statedump(struct ltt_ust_session *usess, struct ust_app *app) { int ret = 0; struct ust_app_session *ua_sess; @@ -7296,7 +7480,7 @@ int ust_app_regenerate_statedump(struct ltt_ust_session *usess, rcu_read_lock(); ua_sess = lookup_session_by_app(usess, app); - if (ua_sess == NULL) { + if (ua_sess == nullptr) { /* The session is in teardown process. Ignore and continue. */ goto end; } @@ -7333,7 +7517,7 @@ int ust_app_regenerate_statedump_all(struct ltt_ust_session *usess) rcu_read_lock(); - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { if (!app->compatible) { continue; } @@ -7372,25 +7556,25 @@ enum lttng_error_code ust_app_rotate_session(struct ltt_session *session) { struct buffer_reg_uid *reg; - cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) { + cds_list_for_each_entry (reg, &usess->buffer_reg_uid_list, lnode) { struct buffer_reg_channel *buf_reg_chan; struct consumer_socket *socket; /* Get consumer socket to use to push the metadata.*/ socket = consumer_find_socket_by_bitness(reg->bits_per_long, - usess->consumer); + usess->consumer); if (!socket) { cmd_ret = LTTNG_ERR_INVALID; goto error; } /* Rotate the data channels. */ - cds_lfht_for_each_entry(reg->registry->channels->ht, &iter.iter, - buf_reg_chan, node.node) { + cds_lfht_for_each_entry ( + reg->registry->channels->ht, &iter.iter, buf_reg_chan, node.node) { ret = consumer_rotate_channel(socket, - buf_reg_chan->consumer_key, - usess->consumer, - /* is_metadata_channel */ false); + buf_reg_chan->consumer_key, + usess->consumer, + /* is_metadata_channel */ false); if (ret < 0) { cmd_ret = LTTNG_ERR_ROTATION_FAIL_CONSUMER; goto error; @@ -7416,9 +7600,9 @@ enum lttng_error_code ust_app_rotate_session(struct ltt_session *session) } ret = consumer_rotate_channel(socket, - reg->registry->reg.ust->_metadata_key, - usess->consumer, - /* is_metadata_channel */ true); + reg->registry->reg.ust->_metadata_key, + usess->consumer, + /* is_metadata_channel */ true); if (ret < 0) { cmd_ret = LTTNG_ERR_ROTATION_FAIL_CONSUMER; goto error; @@ -7428,7 +7612,7 @@ enum lttng_error_code ust_app_rotate_session(struct ltt_session *session) } case LTTNG_BUFFER_PER_PID: { - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct consumer_socket *socket; struct lttng_ht_iter chan_iter; struct ust_app_channel *ua_chan; @@ -7443,7 +7627,7 @@ enum lttng_error_code ust_app_rotate_session(struct ltt_session *session) /* Get the right consumer socket for the application. */ socket = consumer_find_socket_by_bitness(app->abi.bits_per_long, - usess->consumer); + usess->consumer); if (!socket) { cmd_ret = LTTNG_ERR_INVALID; goto error; @@ -7456,12 +7640,12 @@ enum lttng_error_code ust_app_rotate_session(struct ltt_session *session) } /* Rotate the data channels. */ - cds_lfht_for_each_entry(ua_sess->channels->ht, &chan_iter.iter, - ua_chan, node.node) { + cds_lfht_for_each_entry ( + ua_sess->channels->ht, &chan_iter.iter, ua_chan, node.node) { ret = consumer_rotate_channel(socket, - ua_chan->key, - ua_sess->consumer, - /* is_metadata_channel */ false); + ua_chan->key, + ua_sess->consumer, + /* is_metadata_channel */ false); if (ret < 0) { /* Per-PID buffer and application going away. */ if (ret == -LTTNG_ERR_CHAN_NOT_FOUND) @@ -7478,9 +7662,9 @@ enum lttng_error_code ust_app_rotate_session(struct ltt_session *session) (void) push_metadata(locked_registry, usess->consumer); } ret = consumer_rotate_channel(socket, - registry->_metadata_key, - ua_sess->consumer, - /* is_metadata_channel */ true); + registry->_metadata_key, + ua_sess->consumer, + /* is_metadata_channel */ true); if (ret < 0) { /* Per-PID buffer and application going away. */ if (ret == -LTTNG_ERR_CHAN_NOT_FOUND) @@ -7503,8 +7687,7 @@ error: return cmd_ret; } -enum lttng_error_code ust_app_create_channel_subdirectories( - const struct ltt_ust_session *usess) +enum lttng_error_code ust_app_create_channel_subdirectories(const struct ltt_ust_session *usess) { enum lttng_error_code ret = LTTNG_OK; struct lttng_ht_iter iter; @@ -7520,10 +7703,12 @@ enum lttng_error_code ust_app_create_channel_subdirectories( { struct buffer_reg_uid *reg; - cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) { + cds_list_for_each_entry (reg, &usess->buffer_reg_uid_list, lnode) { fmt_ret = asprintf(&pathname_index, - DEFAULT_UST_TRACE_DIR "/" DEFAULT_UST_TRACE_UID_PATH "/" DEFAULT_INDEX_DIR, - reg->uid, reg->bits_per_long); + DEFAULT_UST_TRACE_DIR "/" DEFAULT_UST_TRACE_UID_PATH + "/" DEFAULT_INDEX_DIR, + reg->uid, + reg->bits_per_long); if (fmt_ret < 0) { ERR("Failed to format channel index directory"); ret = LTTNG_ERR_CREATE_DIR_FAIL; @@ -7535,8 +7720,7 @@ enum lttng_error_code ust_app_create_channel_subdirectories( * of implicitly creating the channel's path. */ chunk_status = lttng_trace_chunk_create_subdirectory( - usess->current_trace_chunk, - pathname_index); + usess->current_trace_chunk, pathname_index); free(pathname_index); if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) { ret = LTTNG_ERR_CREATE_DIR_FAIL; @@ -7552,16 +7736,14 @@ enum lttng_error_code ust_app_create_channel_subdirectories( /* * Create the toplevel ust/ directory in case no apps are running. */ - chunk_status = lttng_trace_chunk_create_subdirectory( - usess->current_trace_chunk, - DEFAULT_UST_TRACE_DIR); + chunk_status = lttng_trace_chunk_create_subdirectory(usess->current_trace_chunk, + DEFAULT_UST_TRACE_DIR); if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) { ret = LTTNG_ERR_CREATE_DIR_FAIL; goto error; } - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, - pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct ust_app_session *ua_sess; lsu::registry_session *registry; @@ -7578,8 +7760,8 @@ enum lttng_error_code ust_app_create_channel_subdirectories( } fmt_ret = asprintf(&pathname_index, - DEFAULT_UST_TRACE_DIR "/%s/" DEFAULT_INDEX_DIR, - ua_sess->path); + DEFAULT_UST_TRACE_DIR "/%s/" DEFAULT_INDEX_DIR, + ua_sess->path); if (fmt_ret < 0) { ERR("Failed to format channel index directory"); ret = LTTNG_ERR_CREATE_DIR_FAIL; @@ -7590,8 +7772,7 @@ enum lttng_error_code ust_app_create_channel_subdirectories( * of implicitly creating the channel's path. */ chunk_status = lttng_trace_chunk_create_subdirectory( - usess->current_trace_chunk, - pathname_index); + usess->current_trace_chunk, pathname_index); free(pathname_index); if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) { ret = LTTNG_ERR_CREATE_DIR_FAIL; @@ -7638,23 +7819,22 @@ enum lttng_error_code ust_app_clear_session(struct ltt_session *session) { struct buffer_reg_uid *reg; - cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) { + cds_list_for_each_entry (reg, &usess->buffer_reg_uid_list, lnode) { struct buffer_reg_channel *buf_reg_chan; struct consumer_socket *socket; /* Get consumer socket to use to push the metadata.*/ socket = consumer_find_socket_by_bitness(reg->bits_per_long, - usess->consumer); + usess->consumer); if (!socket) { cmd_ret = LTTNG_ERR_INVALID; goto error_socket; } /* Clear the data channels. */ - cds_lfht_for_each_entry(reg->registry->channels->ht, &iter.iter, - buf_reg_chan, node.node) { - ret = consumer_clear_channel(socket, - buf_reg_chan->consumer_key); + cds_lfht_for_each_entry ( + reg->registry->channels->ht, &iter.iter, buf_reg_chan, node.node) { + ret = consumer_clear_channel(socket, buf_reg_chan->consumer_key); if (ret < 0) { goto error; } @@ -7670,8 +7850,7 @@ enum lttng_error_code ust_app_clear_session(struct ltt_session *session) * Metadata channel is not cleared per se but we still need to * perform a rotation operation on it behind the scene. */ - ret = consumer_clear_channel(socket, - reg->registry->reg.ust->_metadata_key); + ret = consumer_clear_channel(socket, reg->registry->reg.ust->_metadata_key); if (ret < 0) { goto error; } @@ -7680,7 +7859,7 @@ enum lttng_error_code ust_app_clear_session(struct ltt_session *session) } case LTTNG_BUFFER_PER_PID: { - cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct consumer_socket *socket; struct lttng_ht_iter chan_iter; struct ust_app_channel *ua_chan; @@ -7695,7 +7874,7 @@ enum lttng_error_code ust_app_clear_session(struct ltt_session *session) /* Get the right consumer socket for the application. */ socket = consumer_find_socket_by_bitness(app->abi.bits_per_long, - usess->consumer); + usess->consumer); if (!socket) { cmd_ret = LTTNG_ERR_INVALID; goto error_socket; @@ -7708,8 +7887,8 @@ enum lttng_error_code ust_app_clear_session(struct ltt_session *session) } /* Clear the data channels. */ - cds_lfht_for_each_entry(ua_sess->channels->ht, &chan_iter.iter, - ua_chan, node.node) { + cds_lfht_for_each_entry ( + ua_sess->channels->ht, &chan_iter.iter, ua_chan, node.node) { ret = consumer_clear_channel(socket, ua_chan->key); if (ret < 0) { /* Per-PID buffer and application going away. */ @@ -7795,24 +7974,21 @@ enum lttng_error_code ust_app_open_packets(struct ltt_session *session) { struct buffer_reg_uid *reg; - cds_list_for_each_entry ( - reg, &usess->buffer_reg_uid_list, lnode) { + cds_list_for_each_entry (reg, &usess->buffer_reg_uid_list, lnode) { struct buffer_reg_channel *buf_reg_chan; struct consumer_socket *socket; - socket = consumer_find_socket_by_bitness( - reg->bits_per_long, usess->consumer); + socket = consumer_find_socket_by_bitness(reg->bits_per_long, + usess->consumer); if (!socket) { ret = LTTNG_ERR_FATAL; goto error; } - cds_lfht_for_each_entry(reg->registry->channels->ht, - &iter.iter, buf_reg_chan, node.node) { - const int open_ret = - consumer_open_channel_packets( - socket, - buf_reg_chan->consumer_key); + cds_lfht_for_each_entry ( + reg->registry->channels->ht, &iter.iter, buf_reg_chan, node.node) { + const int open_ret = consumer_open_channel_packets( + socket, buf_reg_chan->consumer_key); if (open_ret < 0) { ret = LTTNG_ERR_UNK; @@ -7826,8 +8002,7 @@ enum lttng_error_code ust_app_open_packets(struct ltt_session *session) { struct ust_app *app; - cds_lfht_for_each_entry ( - ust_app_ht->ht, &iter.iter, app, pid_n.node) { + cds_lfht_for_each_entry (ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct consumer_socket *socket; struct lttng_ht_iter chan_iter; struct ust_app_channel *ua_chan; @@ -7841,8 +8016,8 @@ enum lttng_error_code ust_app_open_packets(struct ltt_session *session) } /* Get the right consumer socket for the application. */ - socket = consumer_find_socket_by_bitness( - app->abi.bits_per_long, usess->consumer); + socket = consumer_find_socket_by_bitness(app->abi.bits_per_long, + usess->consumer); if (!socket) { ret = LTTNG_ERR_FATAL; goto error; @@ -7854,12 +8029,10 @@ enum lttng_error_code ust_app_open_packets(struct ltt_session *session) continue; } - cds_lfht_for_each_entry(ua_sess->channels->ht, - &chan_iter.iter, ua_chan, node.node) { + cds_lfht_for_each_entry ( + ua_sess->channels->ht, &chan_iter.iter, ua_chan, node.node) { const int open_ret = - consumer_open_channel_packets( - socket, - ua_chan->key); + consumer_open_channel_packets(socket, ua_chan->key); if (open_ret < 0) { /* @@ -7886,3 +8059,30 @@ error: rcu_read_unlock(); return ret; } + +lsu::ctl_field_quirks ust_app::ctl_field_quirks() const +{ + /* + * Application contexts are expressed as variants. LTTng-UST announces + * those by registering an enumeration named `..._tag`. It then registers a + * variant as part of the event context that contains the various possible + * types. + * + * Unfortunately, the names used in the enumeration and variant don't + * match: the enumeration names are all prefixed with an underscore while + * the variant type tag fields aren't. + * + * While the CTF 1.8.3 specification mentions that + * underscores *should* (not *must*) be removed by CTF readers. Babeltrace + * 1.x (and possibly others) expect a perfect match between the names used + * by tags and variants. + * + * When the UNDERSCORE_PREFIXED_VARIANT_TAG_MAPPINGS quirk is enabled, + * the variant's fields are modified to match the mappings of its tag. + * + * From ABI version >= 10.x, the variant fields and tag mapping names + * correctly match, making this quirk unnecessary. + */ + return v_major <= 9 ? lsu::ctl_field_quirks::UNDERSCORE_PREFIXED_VARIANT_TAG_MAPPINGS : + lsu::ctl_field_quirks::NONE; +} \ No newline at end of file