#include "session.hpp"
#include "trace-class.hpp"
#include "tsdl-trace-class-visitor.hpp"
+#include "ctf2-trace-class-visitor.hpp"
#include "ust-app.hpp"
#include "ust-field-convert.hpp"
#include "ust-registry.hpp"
LTTNG_ASSERT(key);
return hash_key_str(key->name.c_str(), seed);
}
-
} /* namespace */
void lsu::details::locked_registry_session_release(lsu::registry_session *session)
_metadata_generating_visitor{lttng::make_unique<ls::tsdl::trace_class_visitor>(
abi, [this](const std::string& fragment) {
_append_metadata_fragment(fragment);
- })}
+ })},
+ _packet_header{_create_packet_header()}
{
pthread_mutex_init(&_lock, NULL);
if (_shm_path.size() > 0) {
}
}
+lst::type::cuptr lsu::registry_session::_create_packet_header() const
+{
+ lst::structure_type::fields packet_header_fields;
+
+ /* uint32_t magic */
+ packet_header_fields.emplace_back(lttng::make_unique<lst::field>("magic",
+ lttng::make_unique<lst::integer_type>(abi.uint32_t_alignment,
+ abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::HEXADECIMAL,
+ std::initializer_list<lst::integer_type::role>({lst::integer_type::role::PACKET_MAGIC_NUMBER}))));
+
+ /* uuid */
+ packet_header_fields.emplace_back(lttng::make_unique<lst::field>("uuid",
+ lttng::make_unique<lst::static_length_blob_type>(0, 16,
+ std::initializer_list<lst::static_length_blob_type::role>({lst::static_length_blob_type::role::METADATA_STREAM_UUID}))));
+
+ /* uint32_t stream_id */
+ packet_header_fields.emplace_back(lttng::make_unique<lst::field>("stream_id",
+ lttng::make_unique<lst::integer_type>(abi.uint32_t_alignment,
+ abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>({lst::integer_type::role::DATA_STREAM_CLASS_ID}))));
+
+ /* uint64_t stream_instance_id */
+ packet_header_fields.emplace_back(lttng::make_unique<lst::field>("stream_instance_id",
+ lttng::make_unique<lst::integer_type>(abi.uint64_t_alignment,
+ abi.byte_order, 64, lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>({lst::integer_type::role::DATA_STREAM_ID}))));
+
+ return lttng::make_unique<lst::structure_type>(0, std::move(packet_header_fields));
+}
+
+const lst::type *lsu::registry_session::packet_header() const noexcept
+{
+ return _packet_header.get();
+}
+
/*
* For a given enumeration in a registry, delete the entry and destroy
* the enumeration.
lttng_ht_add_unique_u64(_channels.get(), &chan->_node);
}
-lttng::sessiond::ust::registry_channel& lsu::registry_session::get_channel(
+lttng::sessiond::ust::registry_channel& lsu::registry_session::channel(
uint64_t channel_key) const
{
lttng::urcu::read_lock_guard read_lock_guard;
lttng::urcu::read_lock_guard read_lock_guard;
ASSERT_LOCKED(_lock);
- auto& channel = get_channel(channel_key);
+ auto& channel_to_remove = channel(channel_key);
- iter.iter.node = &channel._node.node;
+ iter.iter.node = &channel_to_remove._node.node;
ret = lttng_ht_del(_channels.get(), &iter);
LTTNG_ASSERT(!ret);
- destroy_channel(&channel, notify);
+ destroy_channel(&channel_to_remove, notify);
}
-void lsu::registry_session::_visit_environment(
- lttng::sessiond::trace::trace_class_visitor& visitor) const
+void lsu::registry_session::accept(
+ lttng::sessiond::trace::trace_class_environment_visitor& visitor) const
{
ASSERT_LOCKED(_lock);
visitor.visit(lst::environment_field<int64_t>("tracer_major", _app_tracer_version.major));
visitor.visit(lst::environment_field<int64_t>("tracer_minor", _app_tracer_version.minor));
visitor.visit(lst::environment_field<const char *>("tracer_buffering_scheme",
- get_buffering_scheme() == LTTNG_BUFFER_PER_PID ? "pid" : "uid"));
+ buffering_scheme() == LTTNG_BUFFER_PER_PID ? "pid" : "uid"));
visitor.visit(lst::environment_field<int64_t>("architecture_bit_width", abi.bits_per_long));
{
void lsu::registry_session::_generate_metadata()
{
- accept(*_metadata_generating_visitor);
+ trace_class::accept(*_metadata_generating_visitor);
}
void lsu::registry_session::regenerate_metadata()
* disposes of the object.
*/
lsu::registry_enum::const_rcu_protected_reference
-lsu::registry_session::get_enumeration(const char *enum_name, uint64_t enum_id) const
+lsu::registry_session::enumeration(const char *enum_name, uint64_t enum_id) const
{
lsu::registry_enum *reg_enum = NULL;
struct lttng_ht_node_str *node;
return lsu::registry_enum::const_rcu_protected_reference{*reg_enum, std::move(rcu_lock)};
}
-lst::type::cuptr lsu::registry_session::get_packet_header() const
-{
- lst::structure_type::fields packet_header_fields;
-
- /* uint32_t magic */
- packet_header_fields.emplace_back(lttng::make_unique<lst::field>("magic",
- lttng::make_unique<lst::integer_type>(abi.uint32_t_alignment,
- abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED,
- lst::integer_type::base::HEXADECIMAL,
- std::initializer_list<lst::integer_type::role>({lst::integer_type::role::PACKET_MAGIC_NUMBER}))));
-
- /* uuid */
- packet_header_fields.emplace_back(lttng::make_unique<lst::field>("uuid",
- lttng::make_unique<lst::static_length_blob_type>(0, 16,
- std::initializer_list<lst::static_length_blob_type::role>({lst::static_length_blob_type::role::TRACE_CLASS_UUID}))));
-
- /* uint32_t stream_id */
- packet_header_fields.emplace_back(lttng::make_unique<lst::field>("stream_id",
- lttng::make_unique<lst::integer_type>(abi.uint32_t_alignment,
- abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED,
- lst::integer_type::base::DECIMAL,
- std::initializer_list<lst::integer_type::role>({lst::integer_type::role::DATA_STREAM_CLASS_ID}))));
-
- /* uint64_t stream_instance_id */
- packet_header_fields.emplace_back(lttng::make_unique<lst::field>("stream_instance_id",
- lttng::make_unique<lst::integer_type>(abi.uint64_t_alignment,
- abi.byte_order, 64, lst::integer_type::signedness::UNSIGNED,
- lst::integer_type::base::DECIMAL,
- std::initializer_list<lst::integer_type::role>({lst::integer_type::role::DATA_STREAM_ID}))));
-
- return lttng::make_unique<lst::structure_type>(0, std::move(packet_header_fields));
-}
-
/*
* Lookup enumeration by name and comparing enumeration entries.
* Needs to be called from RCU read-side critical section.