X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-registry-channel.cpp;h=e7fe73971391c60cca06537bbc830701746e999a;hb=36038679a47861ffc7e937ea6446d6ca3805b109;hp=d03c89c6e832cbc28cfcda045eec4a1096fb9de6;hpb=d7bfb9b0fa35679d3e728b9165699d9faf905539;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-registry-channel.cpp b/src/bin/lttng-sessiond/ust-registry-channel.cpp index d03c89c6e..e7fe73971 100644 --- a/src/bin/lttng-sessiond/ust-registry-channel.cpp +++ b/src/bin/lttng-sessiond/ust-registry-channel.cpp @@ -48,12 +48,7 @@ int ht_match_event(struct cds_lfht_node *node, const void *_key) LTTNG_ASSERT(node); LTTNG_ASSERT(_key); - DIAGNOSTIC_PUSH - DIAGNOSTIC_IGNORE_INVALID_OFFSETOF - event = caa_container_of(node, lttng::sessiond::ust::registry_event, _node.node); - DIAGNOSTIC_POP - - LTTNG_ASSERT(event); + event = lttng::utils::container_of(node, <tng::sessiond::ust::registry_event::_node); key = (lttng::sessiond::ust::registry_event *) _key; /* It has to be a perfect match. First, compare the event names. */ @@ -104,6 +99,13 @@ lsu::registry_channel::registry_channel(unsigned int channel_id, /* Set custom match function. */ _events->match_fct = ht_match_event; _events->hash_fct = ht_hash_event; + + _rcu_head = {}; + /* + * Node's key is initialized by the channel's parent session. Its value is irrelevant to the + * channel object itself. + */ + _node = {}; } void lsu::registry_channel::add_event( @@ -158,18 +160,15 @@ void lsu::registry_channel::add_event( * are matched using the event name and signature. */ nptr = cds_lfht_add_unique(_events->ht, _events->hash_fct(event.get(), lttng_ht_seed), - _events->match_fct, event.get(), &event->_node.node); - if (nptr != &event->_node.node) { + _events->match_fct, event.get(), &event->_node); + if (nptr != &event->_node) { if (buffer_type == LTTNG_BUFFER_PER_UID) { /* * This is normal, we just have to send the event id of the * returned node. */ - DIAGNOSTIC_PUSH - DIAGNOSTIC_IGNORE_INVALID_OFFSETOF - const auto existing_event = caa_container_of( - nptr, lttng::sessiond::ust::registry_event, _node.node); - DIAGNOSTIC_POP + const auto existing_event = lttng::utils::container_of( + nptr, <tng::sessiond::ust::registry_event::_node); event_id = existing_event->id; } else { LTTNG_THROW_INVALID_ARGUMENT_ERROR(fmt::format( @@ -239,7 +238,7 @@ void lsu::registry_channel::_accept_on_event_classes( DIAGNOSTIC_PUSH DIAGNOSTIC_IGNORE_INVALID_OFFSETOF - cds_lfht_for_each_entry(_events->ht, &iter.iter, event, _node.node) { + cds_lfht_for_each_entry(_events->ht, &iter.iter, event, _node) { sorted_event_classes.emplace_back(event); } DIAGNOSTIC_POP