Fix: ust metadata: resample clock on regenerate metadata
[lttng-tools.git] / src / bin / lttng-sessiond / ust-registry-session.cpp
index b78091a04f4ca277ac033b2c60b85670922abf4d..eced786e0446836f54ffbadf47a0607f5eb04775 100644 (file)
@@ -88,7 +88,7 @@ void destroy_channel_rcu(struct rcu_head *head)
        DIAGNOSTIC_PUSH
        DIAGNOSTIC_IGNORE_INVALID_OFFSETOF
        lsu::registry_channel *chan =
-               caa_container_of(head, lsu::registry_channel, _rcu_head);
+               lttng::utils::container_of(head, &lsu::registry_channel::_rcu_head);
        DIAGNOSTIC_POP
 
        delete chan;
@@ -125,7 +125,7 @@ void destroy_channel(lsu::registry_channel *chan, bool notify) noexcept
                DIAGNOSTIC_PUSH
                DIAGNOSTIC_IGNORE_INVALID_OFFSETOF
                cds_lfht_for_each_entry(
-                               chan->_events->ht, &iter.iter, event, _node.node) {
+                               chan->_events->ht, &iter.iter, event, _node) {
                        /* Delete the node from the ht and free it. */
                        ust_registry_channel_destroy_event(chan, event);
                }
@@ -149,7 +149,7 @@ void destroy_enum_rcu(struct rcu_head *head)
        DIAGNOSTIC_PUSH
        DIAGNOSTIC_IGNORE_INVALID_OFFSETOF
        lsu::registry_enum *reg_enum =
-               caa_container_of(head, lsu::registry_enum, rcu_head);
+               lttng::utils::container_of(head, &lsu::registry_enum::rcu_head);
        DIAGNOSTIC_POP
 
        destroy_enum(reg_enum);
@@ -246,6 +246,7 @@ lsu::registry_session::registry_session(const struct lst::abi& in_abi,
        _gid{egid},
        _app_tracer_version{.major = major, .minor = minor},
        _tracing_id{tracing_id},
+       _clock{lttng::make_unique<lsu::clock_class>()},
        _metadata_generating_visitor{lttng::make_unique<ls::tsdl::trace_class_visitor>(abi,
                        [this](const std::string& fragment) {
                                _append_metadata_fragment(fragment);
@@ -434,7 +435,7 @@ lttng::sessiond::ust::registry_channel& lsu::registry_session::get_channel(
 
        DIAGNOSTIC_PUSH
        DIAGNOSTIC_IGNORE_INVALID_OFFSETOF
-       auto chan = caa_container_of(node, lsu::registry_channel, _node);
+       auto chan = lttng::utils::container_of(node, &lsu::registry_channel::_node);
        DIAGNOSTIC_POP
        return *chan;
 }
@@ -487,7 +488,7 @@ void lsu::registry_session::_visit_environment(
 void lsu::registry_session::_accept_on_clock_classes(lst::trace_class_visitor& visitor) const
 {
        ASSERT_LOCKED(_lock);
-       _clock.accept(visitor);
+       _clock->accept(visitor);
 }
 
 void lsu::registry_session::_accept_on_stream_classes(lst::trace_class_visitor& visitor) const
@@ -613,6 +614,9 @@ void lsu::registry_session::regenerate_metadata()
 {
        lttng::pthread::lock_guard registry_lock(_lock);
 
+       /* Resample the clock */
+       _clock = lttng::make_unique<lsu::clock_class>();
+
        _metadata_version++;
        _reset_metadata();
        _generate_metadata();
@@ -654,7 +658,7 @@ lsu::registry_session::get_enumeration(const char *enum_name, uint64_t enum_id)
 
        DIAGNOSTIC_PUSH
        DIAGNOSTIC_IGNORE_INVALID_OFFSETOF
-       reg_enum = caa_container_of(node, lsu::registry_enum, node);
+       reg_enum = lttng::utils::container_of(node, &lsu::registry_enum::node);
        DIAGNOSTIC_POP
 
        return lsu::registry_enum::const_rcu_protected_reference{*reg_enum, std::move(rcu_lock)};
@@ -682,7 +686,7 @@ lsu::registry_enum *lsu::registry_session::_lookup_enum(
 
        DIAGNOSTIC_PUSH
        DIAGNOSTIC_IGNORE_INVALID_OFFSETOF
-       reg_enum = caa_container_of(node, lsu::registry_enum, node);
+       reg_enum = lttng::utils::container_of(node, &lsu::registry_enum::node);
        DIAGNOSTIC_POP
 
 end:
@@ -762,4 +766,4 @@ void lsu::registry_session::create_or_find_enum(
        DBG("UST registry reply with enum %s with id %" PRIu64 " in sess_objd: %u",
                        enum_name, reg_enum->id, session_objd);
        *enum_id = reg_enum->id;
-}
\ No newline at end of file
+}
This page took 0.024701 seconds and 4 git commands to generate.