#define BT_COMP_LOG_SELF_COMP self_comp
#define BT_LOG_OUTPUT_LEVEL log_level
#define BT_LOG_TAG "PLUGIN/FLT.LTTNG-UTILS.DEBUG-INFO"
-#include "plugins/comp-logging.h"
+#include "logging/comp-logging.h"
#include <glib.h>
bt_self_component *self_comp;
struct debug_info_component *comp;
const bt_trace *input_trace;
- uint64_t destruction_listener_id;
+ bt_listener_id destruction_listener_id;
/*
* Hash table of VPIDs (pointer to int64_t) to
void event_get_common_context_signed_integer_field_value(
const bt_event *event, const char *field_name, int64_t *value)
{
- *value = bt_field_signed_integer_get_value(
+ *value = bt_field_integer_signed_get_value(
event_borrow_common_context_field(event, field_name));
}
bt_field_array_borrow_element_field_by_index_const(
build_id_field, i);
- build_id[i] = bt_field_unsigned_integer_get_value(curr_field);
+ build_id[i] = bt_field_integer_unsigned_get_value(curr_field);
}
return ret;
void event_get_payload_unsigned_integer_field_value(const bt_event *event,
const char *field_name, uint64_t *value)
{
- *value = bt_field_unsigned_integer_get_value(
+ *value = bt_field_integer_unsigned_get_value(
event_borrow_payload_field(event, field_name));
}
bool event_has_payload_field(const bt_event *event,
const char *field_name)
{
- return event_borrow_payload_field(event, field_name) != NULL;
+ return event_borrow_payload_field(event, field_name);
}
static
debug_info->destruction_listener_id);
if (remove_listener_status != BT_TRACE_REMOVE_LISTENER_STATUS_OK) {
BT_COMP_LOGE("Trace destruction listener removal failed.");
+ bt_current_thread_clear_error();
}
g_free(debug_info);
debug_info = g_hash_table_lookup(debug_it->debug_info_map, trace);
if (!debug_info) {
+ bt_trace_add_listener_status add_listener_status;
+
debug_info = debug_info_create(debug_it->debug_info_component,
trace, &debug_it->fd_cache);
g_hash_table_insert(debug_it->debug_info_map, (gpointer) trace,
debug_info);
- bt_trace_add_destruction_listener(trace,
- trace_debug_info_remove_func, debug_it,
+ add_listener_status = bt_trace_add_destruction_listener(
+ trace, trace_debug_info_remove_func,
+ debug_it,
&debug_info->destruction_listener_id);
+ BT_ASSERT(add_listener_status == BT_TRACE_ADD_LISTENER_STATUS_OK);
}
q_event_name = g_quark_try_string(event_name);
BT_COMP_LOGE("Cannot set path component of \"bin\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
+ bt_current_thread_clear_error();
}
append_status = bt_field_string_append(curr_field,
BT_COMP_LOGE("Cannot set bin location component of \"bin\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
+ bt_current_thread_clear_error();
}
} else {
set_status = bt_field_string_set_value(curr_field, "");
if (set_status != BT_FIELD_STRING_SET_VALUE_STATUS_OK) {
BT_COMP_LOGE("Cannot set \"bin\" curr_field field's value: "
"str-fc-addr=%p", curr_field);
+ bt_current_thread_clear_error();
}
}
}
if (status != BT_FIELD_STRING_SET_VALUE_STATUS_OK) {
BT_COMP_LOGE("Cannot set \"func\" curr_field field's value: "
"str-fc-addr=%p", curr_field);
+ bt_current_thread_clear_error();
}
}
BT_COMP_LOGE("Cannot set path component of \"src\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
+ bt_current_thread_clear_error();
}
append_status = bt_field_string_append(curr_field, ":");
BT_COMP_LOGE("Cannot set colon component of \"src\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
+ bt_current_thread_clear_error();
}
append_status = bt_field_string_append(curr_field,
BT_COMP_LOGE("Cannot set line number component of \"src\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
+ bt_current_thread_clear_error();
}
} else {
set_status = bt_field_string_set_value(curr_field, "");
if (set_status != BT_FIELD_STRING_SET_VALUE_STATUS_OK) {
BT_COMP_LOGE("Cannot set \"src\" curr_field field's value: "
"str-fc-addr=%p", curr_field);
+ bt_current_thread_clear_error();
}
}
}
if (status != BT_FIELD_STRING_SET_VALUE_STATUS_OK) {
BT_COMP_LOGE("Cannot set \"bin\" bin_field field's value: "
"str-fc-addr=%p", bin_field);
+ bt_current_thread_clear_error();
}
status = bt_field_string_set_value(func_field, "");
if (status != BT_FIELD_STRING_SET_VALUE_STATUS_OK) {
BT_COMP_LOGE("Cannot set \"func\" func_field field's value: "
"str-fc-addr=%p", func_field);
+ bt_current_thread_clear_error();
}
status = bt_field_string_set_value(src_field, "");
if (status != BT_FIELD_STRING_SET_VALUE_STATUS_OK) {
BT_COMP_LOGE("Cannot set \"src\" src_field field's value: "
"str-fc-addr=%p", src_field);
+ bt_current_thread_clear_error();
}
}
static
ip_field = bt_field_structure_borrow_member_field_by_name_const(
out_common_ctx_field, IP_FIELD_NAME);
- vpid = bt_field_signed_integer_get_value(vpid_field);
- ip = bt_field_unsigned_integer_get_value(ip_field);
+ vpid = bt_field_integer_signed_get_value(vpid_field);
+ ip = bt_field_integer_unsigned_get_value(ip_field);
/*
* Borrow the debug_info structure needed for the source
const bt_clock_snapshot *cs;
const bt_clock_class *default_cc;
const bt_packet *in_packet;
+ const bt_stream *in_stream;
+ const bt_stream *out_stream;
bt_event_class *out_event_class;
- bt_packet *out_packet;
+ bt_packet *out_packet = NULL;
bt_event *out_event;
bt_logging_level log_level = debug_it->log_level;
bt_self_component *self_comp = debug_it->self_comp;
}
BT_ASSERT(out_event_class);
+ /* Borrow the input stream. */
+ in_stream = bt_event_borrow_stream_const(in_event);
+ BT_ASSERT(in_stream);
+ out_stream = trace_ir_mapping_borrow_mapped_stream(debug_it->ir_maps,
+ in_stream);
+ BT_ASSERT(in_stream);
+
/* Borrow the input and output packets. */
in_packet = bt_event_borrow_packet_const(in_event);
- out_packet = trace_ir_mapping_borrow_mapped_packet(debug_it->ir_maps,
- in_packet);
+ if (in_packet) {
+ out_packet = trace_ir_mapping_borrow_mapped_packet(
+ debug_it->ir_maps, in_packet);
+ }
default_cc = bt_stream_class_borrow_default_clock_class_const(
bt_event_class_borrow_stream_class_const(in_event_class));
in_message);
/* Create an output event message. */
- out_message = bt_message_event_create_with_default_clock_snapshot(
+ if (out_packet) {
+ out_message =
+ bt_message_event_create_with_packet_and_default_clock_snapshot(
debug_it->input_iterator,
out_event_class, out_packet,
bt_clock_snapshot_get_value(cs));
+ } else {
+ out_message =
+ bt_message_event_create_with_default_clock_snapshot(
+ debug_it->input_iterator,
+ out_event_class, out_stream,
+ bt_clock_snapshot_get_value(cs));
+ }
} else {
- out_message = bt_message_event_create(debug_it->input_iterator,
- out_event_class, out_packet);
+ if (out_packet) {
+ out_message = bt_message_event_create_with_packet(
+ debug_it->input_iterator, out_event_class,
+ out_packet);
+ } else {
+ out_message = bt_message_event_create(
+ debug_it->input_iterator, out_event_class,
+ out_stream);
+ }
}
if (!out_message) {
if (!out_message) {
BT_COMP_LOGE("Error creating output stream end message: out-s-addr=%p",
out_stream);
+ goto end;
}
/* Remove stream from trace mapping hashtable. */
trace_ir_mapping_remove_mapped_stream(debug_it->ir_maps, in_stream);
+end:
return out_message;
}
if (!out_message) {
BT_COMP_LOGE("Error creating output packet end message: "
"out-p-addr=%p", out_packet);
+ goto end;
}
/* Remove packet from data mapping hashtable. */
trace_ir_mapping_remove_mapped_packet(debug_it->ir_maps, in_packet);
+end:
return out_message;
}
return (bt_message*) in_message;
}
-static
-bt_message *handle_stream_act_begin_message(struct debug_info_msg_iter *debug_it,
- const bt_message *in_message)
-{
- const bt_clock_snapshot *cs;
- const bt_clock_class *default_cc;
- bt_message *out_message = NULL;
- bt_stream *out_stream;
- uint64_t cs_value;
- bt_message_stream_activity_clock_snapshot_state cs_state;
- bt_logging_level log_level = debug_it->log_level;
- bt_self_component *self_comp = debug_it->self_comp;
-
- const bt_stream *in_stream =
- bt_message_stream_activity_beginning_borrow_stream_const(
- in_message);
- BT_ASSERT(in_stream);
-
- out_stream = trace_ir_mapping_borrow_mapped_stream(debug_it->ir_maps,
- in_stream);
- BT_ASSERT(out_stream);
-
- out_message = bt_message_stream_activity_beginning_create(
- debug_it->input_iterator, out_stream);
- if (!out_message) {
- BT_COMP_LOGE("Error creating output stream activity beginning "
- "message: out-s-addr=%p", out_stream);
- goto error;
- }
-
- default_cc = bt_stream_class_borrow_default_clock_class_const(
- bt_stream_borrow_class_const(in_stream));
- if (default_cc) {
- /* Borrow clock snapshot. */
- cs_state =
- bt_message_stream_activity_beginning_borrow_default_clock_snapshot_const(
- in_message, &cs);
-
- if (cs_state == BT_MESSAGE_STREAM_ACTIVITY_CLOCK_SNAPSHOT_STATE_KNOWN) {
- cs_value = bt_clock_snapshot_get_value(cs);
- bt_message_stream_activity_beginning_set_default_clock_snapshot(
- out_message, cs_value);
- } else {
- bt_message_stream_activity_beginning_set_default_clock_snapshot_state(
- out_message, cs_state);
- }
- }
-
-error:
- return out_message;
-}
-
-static
-bt_message *handle_stream_act_end_message(struct debug_info_msg_iter *debug_it,
- const bt_message *in_message)
-{
- const bt_clock_snapshot *cs;
- const bt_clock_class *default_cc;
- const bt_stream *in_stream;
- bt_message *out_message;
- bt_stream *out_stream;
- uint64_t cs_value;
- bt_message_stream_activity_clock_snapshot_state cs_state;
- bt_logging_level log_level = debug_it->log_level;
- bt_self_component *self_comp = debug_it->self_comp;
-
- in_stream = bt_message_stream_activity_end_borrow_stream_const(
- in_message);
- BT_ASSERT(in_stream);
-
- out_stream = trace_ir_mapping_borrow_mapped_stream(debug_it->ir_maps,
- in_stream);
- BT_ASSERT(out_stream);
-
- out_message = bt_message_stream_activity_end_create(
- debug_it->input_iterator, out_stream);
- if (!out_message) {
- BT_COMP_LOGE("Error creating output stream activity end message: "
- "out-s-addr=%p", out_stream);
- goto error;
- }
-
- default_cc = bt_stream_class_borrow_default_clock_class_const(
- bt_stream_borrow_class_const(in_stream));
-
- if (default_cc) {
- cs_state =
- bt_message_stream_activity_end_borrow_default_clock_snapshot_const(
- in_message, &cs);
-
- if (cs_state == BT_MESSAGE_STREAM_ACTIVITY_CLOCK_SNAPSHOT_STATE_KNOWN ) {
- cs_value = bt_clock_snapshot_get_value(cs);
- bt_message_stream_activity_end_set_default_clock_snapshot(
- out_message, cs_value);
- } else {
- bt_message_stream_activity_end_set_default_clock_snapshot_state(
- out_message, cs_state);
- }
- }
-
-error:
- return out_message;
-}
-
static
bt_message *handle_discarded_events_message(struct debug_info_msg_iter *debug_it,
const bt_message *in_message)
out_message = handle_msg_iterator_inactivity(debug_it,
in_message);
break;
- case BT_MESSAGE_TYPE_STREAM_ACTIVITY_BEGINNING:
- out_message = handle_stream_act_begin_message(debug_it,
- in_message);
- break;
- case BT_MESSAGE_TYPE_STREAM_ACTIVITY_END:
- out_message = handle_stream_act_end_message(debug_it,
- in_message);
- break;
case BT_MESSAGE_TYPE_DISCARDED_EVENTS:
out_message = handle_discarded_events_message(debug_it,
in_message);
BT_HIDDEN
bt_component_class_init_method_status debug_info_comp_init(
bt_self_component_filter *self_comp_flt,
+ bt_self_component_filter_configuration *config,
const bt_value *params, __attribute__((unused)) void *init_method_data)
{
int ret;
bt_message_put_ref(msgs[i]);
}
+ /*
+ * Drop references of all the input messages not dropped before the
+ * failure.
+ */
+ for (i = curr_msg_idx; i < *count; i++) {
+ bt_message_put_ref(input_msgs[i]);
+ }
+
status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_MEMORY_ERROR;
end:
bt_self_component_filter *self_comp_flt,
bt_self_component_port_output *self_port)
{
- bt_component_class_message_iterator_init_method_status status =
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK;
+ bt_component_class_message_iterator_init_method_status status;
+ bt_self_component_port_input_message_iterator_create_from_message_iterator_status
+ msg_iter_status;
struct bt_self_component_port_input *input_port = NULL;
bt_self_component_port_input_message_iterator *upstream_iterator = NULL;
struct debug_info_msg_iter *debug_info_msg_iter = NULL;
debug_info_msg_iter->self_comp = self_comp;
/* Create an iterator on the upstream component. */
- upstream_iterator = bt_self_component_port_input_message_iterator_create(
- input_port);
- if (!upstream_iterator) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
+ msg_iter_status = bt_self_component_port_input_message_iterator_create_from_message_iterator(
+ self_msg_iter, input_port, &upstream_iterator);
+ if (msg_iter_status != BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_OK) {
+ status = (int) msg_iter_status;
goto error;
}
bt_self_message_iterator_set_data(self_msg_iter, debug_info_msg_iter);
debug_info_msg_iter->input_iterator = self_msg_iter;
+ status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK;
goto end;
error:
}
BT_HIDDEN
-bt_bool debug_info_msg_iter_can_seek_beginning(
- bt_self_message_iterator *self_msg_iter)
+bt_component_class_message_iterator_can_seek_beginning_method_status
+debug_info_msg_iter_can_seek_beginning(
+ bt_self_message_iterator *self_msg_iter, bt_bool *can_seek)
{
struct debug_info_msg_iter *debug_info_msg_iter =
bt_self_message_iterator_get_data(self_msg_iter);
BT_ASSERT(debug_info_msg_iter);
- return bt_self_component_port_input_message_iterator_can_seek_beginning(
- debug_info_msg_iter->msg_iter);
+ return (int) bt_self_component_port_input_message_iterator_can_seek_beginning(
+ debug_info_msg_iter->msg_iter, can_seek);
}
BT_HIDDEN