Fix: sessiond: registry_channel: initialize _rcu_head and _node
[lttng-tools.git] / src / bin / lttng-sessiond / ust-registry-channel.cpp
index d03c89c6e832cbc28cfcda045eec4a1096fb9de6..e7fe73971391c60cca06537bbc830701746e999a 100644 (file)
@@ -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, &lttng::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, &lttng::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
This page took 0.024269 seconds and 4 git commands to generate.