#include <babeltrace2/babeltrace.h>
#include "common/assert.h"
+#include "cpp-common/bt2/wrap.hpp"
#include "cpp-common/vendor/fmt/format.h"
#include "ctfser/ctfser.h"
bt_component_class_initialize_method_status status;
bt_self_component_add_port_status add_port_status;
struct fs_sink_comp *fs_sink = NULL;
- bt_self_component *self_comp = bt_self_component_sink_as_self_component(self_comp_sink);
- fs_sink = new fs_sink_comp {bt2::SelfSinkComponent {self_comp_sink}};
+ fs_sink = new fs_sink_comp {bt2::wrap(self_comp_sink)};
fs_sink->output_dir_path = g_string_new(NULL);
status = configure_component(fs_sink, params);
if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
goto end;
}
- bt_self_component_set_data(self_comp, fs_sink);
+ bt_self_component_set_data(bt_self_component_sink_as_self_component(self_comp_sink),
+ fs_sink);
end:
if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
ctf_fs_ds_file_group *ds_file_group = msg_iter_data->port_data->ds_file_group;
Medium::UP medium = bt2s::make_unique<fs::Medium>(ds_file_group->index, msg_iter_data->logger);
- msg_iter_data->msgIter.emplace(
- bt2::wrap(msg_iter_data->self_msg_iter), *ds_file_group->ctf_fs_trace->cls(),
- ds_file_group->ctf_fs_trace->metadataStreamUuid(), *ds_file_group->stream,
- std::move(medium), msg_iter_data->port_data->ctf_fs->quirks, msg_iter_data->logger);
+ msg_iter_data->msgIter.emplace(msg_iter_data->selfMsgIter, *ds_file_group->ctf_fs_trace->cls(),
+ ds_file_group->ctf_fs_trace->metadataStreamUuid(),
+ *ds_file_group->stream, std::move(medium),
+ msg_iter_data->port_data->ctf_fs->quirks, msg_iter_data->logger);
}
bt_message_iterator_class_seek_beginning_method_status
bt_self_component_port_output_as_self_component_port(self_port));
BT_ASSERT(port_data);
- auto msg_iter_data = bt2s::make_unique<ctf_fs_msg_iter_data>(self_msg_iter);
+ auto msg_iter_data = bt2s::make_unique<ctf_fs_msg_iter_data>(bt2::wrap(self_msg_iter));
msg_iter_data->port_data = port_data;
instantiateMsgIter(msg_iter_data.get());
static int create_one_port_for_trace(struct ctf_fs_component *ctf_fs,
struct ctf_fs_ds_file_group *ds_file_group,
- bt_self_component_source *self_comp_src)
+ const bt2::SelfSourceComponent selfSrcComp)
{
const auto port_name = ctf_fs_make_port_name(ds_file_group);
auto port_data = bt2s::make_unique<ctf_fs_port_data>();
port_data->ctf_fs = ctf_fs;
port_data->ds_file_group = ds_file_group;
- int ret = bt_self_component_source_add_output_port(self_comp_src, port_name.c_str(),
+ int ret = bt_self_component_source_add_output_port(selfSrcComp.libObjPtr(), port_name.c_str(),
port_data.get(), NULL);
if (ret) {
return ret;
static int create_ports_for_trace(struct ctf_fs_component *ctf_fs,
struct ctf_fs_trace *ctf_fs_trace,
- bt_self_component_source *self_comp_src)
+ const bt2::SelfSourceComponent selfSrcComp)
{
/* Create one output port for each stream file group */
for (const auto& ds_file_group : ctf_fs_trace->ds_file_groups) {
- int ret = create_one_port_for_trace(ctf_fs, ds_file_group.get(), self_comp_src);
+ int ret = create_one_port_for_trace(ctf_fs, ds_file_group.get(), selfSrcComp);
if (ret) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(ctf_fs->logger, "Cannot create output port.");
return ret;
trace.name(name);
}
-static ctf_fs_trace::UP ctf_fs_trace_create(const char *path, const char *name,
- const ctf::src::ClkClsCfg& clkClsCfg,
- bt_self_component *selfComp, const bt2c::Logger& logger)
+static ctf_fs_trace::UP
+ctf_fs_trace_create(const char *path, const char *name, const ctf::src::ClkClsCfg& clkClsCfg,
+ const bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp,
+ const bt2c::Logger& logger)
{
auto ctf_fs_trace = bt2s::make_unique<struct ctf_fs_trace>(clkClsCfg, selfComp, logger);
const auto metadataPath = fmt::format("{}" G_DIR_SEPARATOR_S CTF_FS_METADATA_FILENAME, path);
if (ctf_fs_trace->cls()->libCls()) {
bt2::TraceClass traceCls = *ctf_fs_trace->cls()->libCls();
ctf_fs_trace->trace = traceCls.instantiate();
- ctf_trace_class_configure_ir_trace(*ctf_fs_trace->cls(), *ctf_fs_trace->trace,
- bt_self_component_get_graph_mip_version(selfComp),
- logger);
+ ctf_trace_class_configure_ir_trace(
+ *ctf_fs_trace->cls(), *ctf_fs_trace->trace,
+ bt_self_component_get_graph_mip_version(selfComp->libObjPtr()), logger);
set_trace_name(*ctf_fs_trace->trace, name);
}
/* Helper for ctf_fs_component_create_ctf_fs_trace, to handle a single path. */
-static int ctf_fs_component_create_ctf_fs_trace_one_path(struct ctf_fs_component *ctf_fs,
- const char *path_param,
- const char *trace_name,
- std::vector<ctf_fs_trace::UP>& traces,
- bt_self_component *selfComp)
+static int ctf_fs_component_create_ctf_fs_trace_one_path(
+ struct ctf_fs_component *ctf_fs, const char *path_param, const char *trace_name,
+ std::vector<ctf_fs_trace::UP>& traces,
+ const bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp)
{
bt2c::GStringUP norm_path {bt_common_normalize_path(path_param, NULL)};
if (!norm_path) {
return first_ds_file_info_a.path < first_ds_file_info_b.path;
}
-int ctf_fs_component_create_ctf_fs_trace(struct ctf_fs_component *ctf_fs,
- const bt2::ConstArrayValue pathsValue,
- const char *traceName, bt_self_component *selfComp)
+int ctf_fs_component_create_ctf_fs_trace(
+ struct ctf_fs_component *ctf_fs, const bt2::ConstArrayValue pathsValue, const char *traceName,
+ const bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp)
{
std::vector<std::string> paths;
}
static ctf_fs_component::UP ctf_fs_create(const bt2::ConstMapValue params,
- bt_self_component_source *self_comp_src)
+ const bt2::SelfSourceComponent selfSrcComp)
{
- bt_self_component *self_comp = bt_self_component_source_as_self_component(self_comp_src);
- const bt2c::Logger logger {bt2::SelfSourceComponent {self_comp_src}, "PLUGIN/SRC.CTF.FS/COMP"};
+ const bt2c::Logger logger {selfSrcComp, "PLUGIN/SRC.CTF.FS/COMP"};
const auto parameters = read_src_fs_parameters(params, logger);
auto ctf_fs = bt2s::make_unique<ctf_fs_component>(parameters.clkClsCfg, logger);
- if (ctf_fs_component_create_ctf_fs_trace(
- ctf_fs.get(), parameters.inputs,
- parameters.traceName ? parameters.traceName->c_str() : nullptr, self_comp)) {
+ if (ctf_fs_component_create_ctf_fs_trace(ctf_fs.get(), parameters.inputs,
+ parameters.traceName ? parameters.traceName->c_str() :
+ nullptr,
+ static_cast<bt2::SelfComponent>(selfSrcComp))) {
return nullptr;
}
create_streams_for_trace(ctf_fs->trace.get());
- if (create_ports_for_trace(ctf_fs.get(), ctf_fs->trace.get(), self_comp_src)) {
+ if (create_ports_for_trace(ctf_fs.get(), ctf_fs->trace.get(), selfSrcComp)) {
return nullptr;
}
const bt_value *params, void *)
{
try {
- ctf_fs_component::UP ctf_fs = ctf_fs_create(bt2::ConstMapValue {params}, self_comp_src);
+ ctf_fs_component::UP ctf_fs =
+ ctf_fs_create(bt2::ConstMapValue {params}, bt2::wrap(self_comp_src));
if (!ctf_fs) {
return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
}
{
using UP = std::unique_ptr<ctf_fs_msg_iter_data>;
- explicit ctf_fs_msg_iter_data(bt_self_message_iterator *selfMsgIter) :
- self_msg_iter {selfMsgIter},
- logger {bt2::SelfMessageIterator {self_msg_iter}, "PLUGIN/SRC.CTF.FS/MSG-ITER"}
+ explicit ctf_fs_msg_iter_data(const bt2::SelfMessageIterator selfMsgIterParam) :
+ selfMsgIter {selfMsgIterParam}, logger {selfMsgIter, "PLUGIN/SRC.CTF.FS/MSG-ITER"}
{
}
- /* Weak */
- bt_self_message_iterator *self_msg_iter = nullptr;
+ bt2::SelfMessageIterator selfMsgIter;
bt2c::Logger logger;
* `paths_value` must be an array of strings,
*
* The created `struct ctf_fs_trace` is assigned to `ctf_fs->trace`.
- *
- * `self_comp` and `self_comp_class` are used for logging, only one of them
- * should be set.
*/
int ctf_fs_component_create_ctf_fs_trace(struct ctf_fs_component *ctf_fs,
bt2::ConstArrayValue pathsValue, const char *traceName,
- bt_self_component *selfComp);
+ bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp);
namespace ctf {
namespace src {
#include <babeltrace2/babeltrace.h>
+#include "cpp-common/bt2/optional-borrowed-object.hpp"
+#include "cpp-common/bt2/self-component-port.hpp"
+
namespace bt2c {
class Logger;
#define CTF_FS_METADATA_FILENAME "metadata"
-int ctf_fs_metadata_set_trace_class(bt_self_component *self_comp, struct ctf_fs_trace *ctf_fs_trace,
+int ctf_fs_metadata_set_trace_class(bt2::OptionalBorrowedObject<bt2::SelfComponent> selfComp,
+ struct ctf_fs_trace *ctf_fs_trace,
const ctf::src::ClkClsCfg& clkClsCfg);
FILE *ctf_fs_metadata_open_file(const char *trace_path, const bt2c::Logger& logger);
if (ctf_fs_component_create_ctf_fs_trace(
&ctf_fs, parameters.inputs,
- parameters.traceName ? parameters.traceName->c_str() : nullptr, nullptr)) {
+ parameters.traceName ? parameters.traceName->c_str() : nullptr, {})) {
BT_CPPLOGE_APPEND_CAUSE_AND_THROW_SPEC(logger, bt2::Error, "Failed to create trace");
}
#include "common/assert.h"
#include "compat/mman.h" /* IWYU pragma: keep */
-#include "cpp-common/bt2/wrap.hpp"
#include "cpp-common/bt2s/make-unique.hpp"
#include "cpp-common/vendor/fmt/format.h"
liveStreamIter->stream->name(liveStreamIter->name);
auto medium = bt2s::make_unique<ctf::src::live::CtfLiveMedium>(*liveStreamIter);
- liveStreamIter->msg_iter.emplace(bt2::wrap(liveMsgIter->self_msg_iter), *ctfTc,
+ liveStreamIter->msg_iter.emplace(liveMsgIter->selfMsgIter, *ctfTc,
liveStreamIter->trace->metadata->metadataStreamUuid(),
*liveStreamIter->stream, std::move(medium),
ctf::src::MsgIterQuirks {}, liveStreamIter->logger);
}
enum lttng_live_iterator_status lttng_live_lazy_msg_init(struct lttng_live_session *session,
- bt_self_message_iterator *self_msg_iter)
+ const bt2::SelfMessageIterator selfMsgIter)
{
if (!session->lazy_stream_msg_init) {
return LTTNG_LIVE_ITERATOR_STATUS_OK;
BT_CPPLOGD_SPEC(session->logger,
"Lazily initializing self message iterator for live session: "
"session-id={}, self-msg-iter-addr={}",
- session->id, fmt::ptr(self_msg_iter));
+ session->id, fmt::ptr(selfMsgIter.libObjPtr()));
for (lttng_live_trace::UP& trace : session->traces) {
for (lttng_live_stream_iterator::UP& stream_iter : trace->stream_iterators) {
"Creating CTF message iterator: session-id={}, ctf-tc-addr={}, "
"stream-iter-name={}, self-msg-iter-addr={}",
session->id, fmt::ptr(ctfTraceCls), stream_iter->name.c_str(),
- fmt::ptr(self_msg_iter));
+ fmt::ptr(selfMsgIter.libObjPtr()));
}
}
#include "lttng-live.hpp"
enum lttng_live_iterator_status lttng_live_lazy_msg_init(struct lttng_live_session *session,
- bt_self_message_iterator *self_msg_iter);
+ bt2::SelfMessageIterator selfMsgIter);
struct lttng_live_stream_iterator *
lttng_live_stream_iterator_create(struct lttng_live_session *session, uint64_t ctf_trace_id,
return false;
}
- return bt_self_message_iterator_is_interrupted(msg_iter->self_msg_iter);
+ return bt_self_message_iterator_is_interrupted(msg_iter->selfMsgIter.libObjPtr());
}
static struct lttng_live_trace *
* Now that we have the metadata we can initialize the downstream
* iterator.
*/
- return lttng_live_lazy_msg_init(session, lttng_live_msg_iter->self_msg_iter);
+ return lttng_live_lazy_msg_init(session, lttng_live_msg_iter->selfMsgIter);
}
static void
timestamp);
const auto msg = bt_message_message_iterator_inactivity_create(
- lttng_live_msg_iter->self_msg_iter, stream_iter->trace->clock_class->libObjPtr(),
+ lttng_live_msg_iter->selfMsgIter.libObjPtr(), stream_iter->trace->clock_class->libObjPtr(),
timestamp);
if (!msg) {
const auto adjust_status = bt2c::call([&] {
switch (late_msg.type()) {
case bt2::MessageType::DiscardedEvents:
- return adjust_discarded_events_message(lttng_live_msg_iter->self_msg_iter,
+ return adjust_discarded_events_message(lttng_live_msg_iter->selfMsgIter.libObjPtr(),
*stream_iter->stream,
late_msg.asDiscardedEvents(), adjustedMessage,
stream_iter->last_inactivity_ts.value);
case bt2::MessageType::DiscardedPackets:
- return adjust_discarded_packets_message(lttng_live_msg_iter->self_msg_iter,
+ return adjust_discarded_packets_message(lttng_live_msg_iter->selfMsgIter.libObjPtr(),
*stream_iter->stream,
late_msg.asDiscardedPackets(), adjustedMessage,
stream_iter->last_inactivity_ts.value);
static lttng_live_msg_iter::UP
lttng_live_msg_iter_create(struct lttng_live_component *lttng_live_comp,
- bt_self_message_iterator *self_msg_it)
+ const bt2::SelfMessageIterator selfMsgIter)
{
- auto msg_iter = bt2s::make_unique<struct lttng_live_msg_iter>(lttng_live_comp->logger,
- lttng_live_comp->selfComp);
+ auto msg_iter = bt2s::make_unique<struct lttng_live_msg_iter>(
+ lttng_live_comp->logger, lttng_live_comp->selfComp, selfMsgIter);
msg_iter->lttng_live_comp = lttng_live_comp;
- msg_iter->self_msg_iter = self_msg_it;
msg_iter->active_stream_iter = 0;
msg_iter->last_msg_ts_ns = INT64_MIN;
msg_iter->was_interrupted = false;
BT_ASSERT(!lttng_live->has_msg_iter);
lttng_live->has_msg_iter = true;
- auto lttng_live_msg_iter = lttng_live_msg_iter_create(lttng_live, self_msg_it);
+ auto lttng_live_msg_iter = lttng_live_msg_iter_create(lttng_live, bt2::wrap(self_msg_it));
if (!lttng_live_msg_iter) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live->logger,
"Failed to create lttng_live_msg_iter");
struct bt_common_lttng_live_url_parts parts = {};
bt_common_lttng_live_url_parts_deleter partsDeleter {parts};
- /* Used by the logging macros */
- __attribute__((unused)) bt_self_component *self_comp = NULL;
-
const auto typeValue = params["type"];
if (!typeValue) {
BT_CPPLOGE_APPEND_CAUSE_AND_THROW_SPEC(logger, bt2::Error,
try {
lttng_live_component::UP lttng_live;
bt_component_class_initialize_method_status ret;
- bt_self_component *self_comp = bt_self_component_source_as_self_component(self_comp_src);
bt_self_component_add_port_status add_port_status;
ret = lttng_live_component_create(params, self_comp_src, lttng_live);
return ret;
}
- bt_self_component_set_data(self_comp, lttng_live.release());
+ bt_self_component_set_data(bt_self_component_source_as_self_component(self_comp_src),
+ lttng_live.release());
return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
} catch (const std::bad_alloc&) {
using UP = std::unique_ptr<lttng_live_msg_iter>;
explicit lttng_live_msg_iter(const bt2c::Logger& parentLogger,
- const bt2::SelfComponent selfCompParam) :
+ const bt2::SelfComponent selfCompParam,
+ const bt2::SelfMessageIterator selfMsgIter) :
logger {parentLogger, "PLUGIN/SRC.CTF.LTTNG-LIVE/MSG-ITER"},
- selfComp {selfCompParam}
+ selfComp {selfCompParam}, selfMsgIter {selfMsgIter}
{
}
/* Weak reference. */
struct lttng_live_component *lttng_live_comp = nullptr;
- /* Weak reference. */
- bt_self_message_iterator *self_msg_iter = nullptr;
+ bt2::SelfMessageIterator selfMsgIter;
live_viewer_connection::UP viewer_connection;
void lttng_live_component_finalize(bt_self_component_source *component);
bt_message_iterator_class_next_method_status
-lttng_live_msg_iter_next(bt_self_message_iterator *iterator, bt_message_array_const msgs,
+lttng_live_msg_iter_next(bt_self_message_iterator *self_msg_it, bt_message_array_const msgs,
uint64_t capacity, uint64_t *count);
bt_message_iterator_class_initialize_method_status