* SOFTWARE.
*/
-#define BT_LOG_TAG "PLUGIN-CTF-LTTNG-UTILS-DEBUG-INFO-FLT"
-#include "logging.h"
+#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 <glib.h>
#define PATH_FIELD_NAME "path"
struct debug_info_component {
+ bt_logging_level log_level;
+ bt_self_component *self_comp;
gchar *arg_debug_dir;
gchar *arg_debug_info_field_name;
gchar *arg_target_prefix;
};
struct debug_info_msg_iter {
+ bt_logging_level log_level;
struct debug_info_component *debug_info_component;
bt_self_message_iterator *input_iterator;
bt_self_component *self_comp;
};
struct debug_info {
+ bt_logging_level log_level;
+ bt_self_component *self_comp;
struct debug_info_component *comp;
const bt_trace *input_trace;
uint64_t destruction_listener_id;
info->q_lib_load = g_quark_from_string("lttng_ust_lib:load");
info->q_lib_unload = g_quark_from_string("lttng_ust_lib:unload");
- return bin_info_init();
+ return bin_info_init(info->log_level, info->self_comp);
}
static
static
struct debug_info_source *debug_info_source_create_from_bin(
- struct bin_info *bin, uint64_t ip)
+ struct bin_info *bin, uint64_t ip,
+ bt_self_component *self_comp)
{
int ret;
struct debug_info_source *debug_info_src = NULL;
struct source_location *src_loc = NULL;
+ bt_logging_level log_level = bin->log_level;
debug_info_src = g_new0(struct debug_info_source, 1);
/* Lookup source location */
ret = bin_info_lookup_source_location(bin, ip, &src_loc);
if (ret) {
- BT_LOGD("Failed to lookup source location: ret=%d", ret);
+ BT_COMP_LOGI("Failed to lookup source location: ret=%d", ret);
}
}
debug_info_src->line_no =
g_strdup_printf("%"PRId64, src_loc->line_no);
if (!debug_info_src->line_no) {
- BT_LOGD("Error occured when setting line_no field.");
+ BT_COMP_LOGE("Error occured when setting line_no field.");
goto error;
}
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
struct debug_info_source *proc_debug_info_sources_get_entry(
+ struct debug_info *debug_info,
struct proc_debug_info_sources *proc_dbg_info_src, uint64_t ip)
{
struct debug_info_source *debug_info_src = NULL;
* a caching policy), and entries should be prunned when
* libraries are unmapped.
*/
- debug_info_src = debug_info_source_create_from_bin(bin, ip);
+ debug_info_src = debug_info_source_create_from_bin(bin, ip,
+ debug_info->self_comp);
if (debug_info_src) {
g_hash_table_insert(
proc_dbg_info_src->ip_to_debug_info_src,
goto end;
}
- dbg_info_src = proc_debug_info_sources_get_entry(proc_dbg_info_src, ip);
+ dbg_info_src = proc_debug_info_sources_get_entry(debug_info,
+ proc_dbg_info_src, ip);
end:
return dbg_info_src;
goto end;
}
+ debug_info->log_level = comp->log_level;
+ debug_info->self_comp = comp->self_comp;
debug_info->vpid_to_proc_dbg_info_src = g_hash_table_new_full(
g_int64_hash, g_int64_equal, (GDestroyNotify) g_free,
(GDestroyNotify) proc_debug_info_sources_destroy);
static
void debug_info_destroy(struct debug_info *debug_info)
{
- bt_trace_status status;
+ bt_logging_level log_level;
+ bt_self_component *self_comp;
+ bt_trace_remove_listener_status remove_listener_status;
if (!debug_info) {
goto end;
}
+ log_level = debug_info->log_level;
+ self_comp = debug_info->self_comp;
+
if (debug_info->vpid_to_proc_dbg_info_src) {
g_hash_table_destroy(debug_info->vpid_to_proc_dbg_info_src);
}
- status = bt_trace_remove_destruction_listener(debug_info->input_trace,
+ remove_listener_status = bt_trace_remove_destruction_listener(
+ debug_info->input_trace,
debug_info->destruction_listener_id);
- if (status != BT_TRACE_STATUS_OK) {
- BT_LOGD("Trace destruction listener removal failed.");
+ 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);
bin = bin_info_create(debug_info->fd_cache, path, baddr, memsz, is_pic,
debug_info->comp->arg_debug_dir,
- debug_info->comp->arg_target_prefix);
+ debug_info->comp->arg_target_prefix,
+ debug_info->log_level, debug_info->self_comp);
if (!bin) {
goto end;
}
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);
static
void fill_debug_info_bin_field(struct debug_info_source *dbg_info_src,
- bool full_path, bt_field *curr_field)
+ bool full_path, bt_field *curr_field,
+ bt_logging_level log_level, bt_self_component *self_comp)
{
- bt_field_status status;
+ bt_field_string_set_value_status set_status;
+ bt_field_string_append_status append_status;
BT_ASSERT(bt_field_get_class_type(curr_field) ==
BT_FIELD_CLASS_TYPE_STRING);
if (dbg_info_src) {
if (full_path) {
- status = bt_field_string_set_value(curr_field,
- dbg_info_src->bin_path);
+ set_status = bt_field_string_set_value(curr_field,
+ dbg_info_src->bin_path);
} else {
- status = bt_field_string_set_value(curr_field,
- dbg_info_src->short_bin_path);
+ set_status = bt_field_string_set_value(curr_field,
+ dbg_info_src->short_bin_path);
}
- if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set path component of \"bin\" "
+ if (set_status != BT_FIELD_STRING_SET_VALUE_STATUS_OK) {
+ 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();
}
- status = bt_field_string_append(curr_field, dbg_info_src->bin_loc);
- if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set bin location component of \"bin\" "
+ append_status = bt_field_string_append(curr_field,
+ dbg_info_src->bin_loc);
+ if (append_status != BT_FIELD_STRING_APPEND_STATUS_OK) {
+ 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 {
- status = bt_field_string_set_value(curr_field, "");
- if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"bin\" curr_field field's value: "
+ 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();
}
}
}
static
void fill_debug_info_func_field(struct debug_info_source *dbg_info_src,
- bt_field *curr_field)
+ bt_field *curr_field, bt_logging_level log_level,
+ bt_self_component *self_comp)
{
- bt_field_status status;
+ bt_field_string_set_value_status status;
BT_ASSERT(bt_field_get_class_type(curr_field) ==
BT_FIELD_CLASS_TYPE_STRING);
if (dbg_info_src && dbg_info_src->func) {
status = bt_field_string_set_value(curr_field,
- dbg_info_src->func);
+ dbg_info_src->func);
} else {
status = bt_field_string_set_value(curr_field, "");
}
- if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"func\" curr_field field's value: "
+ 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();
}
}
static
void fill_debug_info_src_field(struct debug_info_source *dbg_info_src,
- bool full_path, bt_field *curr_field)
+ bool full_path, bt_field *curr_field,
+ bt_logging_level log_level,
+ bt_self_component *self_comp)
{
- bt_field_status status;
+ bt_field_string_set_value_status set_status;
+ bt_field_string_append_status append_status;
BT_ASSERT(bt_field_get_class_type(curr_field) ==
BT_FIELD_CLASS_TYPE_STRING);
if (dbg_info_src && dbg_info_src->src_path) {
if (full_path) {
- status = bt_field_string_set_value(curr_field,
+ set_status = bt_field_string_set_value(curr_field,
dbg_info_src->src_path);
} else {
- status = bt_field_string_set_value(curr_field,
+ set_status = bt_field_string_set_value(curr_field,
dbg_info_src->short_src_path);
}
- if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set path component of \"src\" "
+ if (set_status != BT_FIELD_STRING_SET_VALUE_STATUS_OK) {
+ 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();
}
- status = bt_field_string_append(curr_field, ":");
- if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set colon component of \"src\" "
+ append_status = bt_field_string_append(curr_field, ":");
+ if (append_status != BT_FIELD_STRING_APPEND_STATUS_OK) {
+ 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();
}
- status = bt_field_string_append(curr_field, dbg_info_src->line_no);
- if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set line number component of \"src\" "
+ append_status = bt_field_string_append(curr_field,
+ dbg_info_src->line_no);
+ if (append_status != BT_FIELD_STRING_APPEND_STATUS_OK) {
+ 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 {
- status = bt_field_string_set_value(curr_field, "");
- if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"src\" curr_field field's value: "
+ 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();
}
}
}
-void fill_debug_info_field_empty(bt_field *debug_info_field)
+static
+void fill_debug_info_field_empty(bt_field *debug_info_field,
+ bt_logging_level log_level, bt_self_component *self_comp)
{
- bt_field_status status;
+ bt_field_string_set_value_status status;
bt_field *bin_field, *func_field, *src_field;
BT_ASSERT(bt_field_get_class_type(debug_info_field) ==
BT_FIELD_CLASS_TYPE_STRING);
status = bt_field_string_set_value(bin_field, "");
- if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"bin\" bin_field field's value: "
+ 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_STATUS_OK) {
- BT_LOGE("Cannot set \"func\" func_field field's value: "
+ 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_STATUS_OK) {
- BT_LOGE("Cannot set \"src\" src_field field's value: "
+ 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
dbg_info_src = debug_info_query(debug_info, vpid, ip);
- fill_debug_info_bin_field(dbg_info_src, debug_info->comp->arg_full_path,
- bt_field_structure_borrow_member_field_by_name(
- debug_info_field, "bin"));
+ fill_debug_info_bin_field(dbg_info_src,
+ debug_info->comp->arg_full_path,
+ bt_field_structure_borrow_member_field_by_name(
+ debug_info_field, "bin"),
+ debug_info->log_level, debug_info->self_comp);
fill_debug_info_func_field(dbg_info_src,
- bt_field_structure_borrow_member_field_by_name(
- debug_info_field, "func"));
- fill_debug_info_src_field(dbg_info_src, debug_info->comp->arg_full_path,
- bt_field_structure_borrow_member_field_by_name(
- debug_info_field, "src"));
+ bt_field_structure_borrow_member_field_by_name(
+ debug_info_field, "func"),
+ debug_info->log_level, debug_info->self_comp);
+ fill_debug_info_src_field(dbg_info_src,
+ debug_info->comp->arg_full_path,
+ bt_field_structure_borrow_member_field_by_name(
+ debug_info_field, "src"),
+ debug_info->log_level, debug_info->self_comp);
}
static
int64_t ip;
gchar *debug_info_field_name =
debug_it->debug_info_component->arg_debug_info_field_name;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_common_ctx_field = bt_event_borrow_common_context_field_const(
in_event);
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
*/
fill_debug_info_field(debug_info, vpid, ip, out_debug_info_field);
} else {
- BT_LOGD("No debug information for this trace. Setting debug "
+ BT_COMP_LOGD("No debug information for this trace. Setting debug "
"info fields to empty strings.");
- fill_debug_info_field_empty(out_debug_info_field);
+ fill_debug_info_field_empty(out_debug_info_field,
+ log_level, self_comp);
}
end:
return;
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_message *out_message = NULL;
}
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) {
- BT_LOGE("Error creating output event message.");
+ BT_COMP_LOGE("Error creating output event message.");
goto error;
}
out_event = bt_message_event_borrow_event(out_message);
/* Copy the original fields to the output event. */
- copy_event_content(in_event, out_event);
+ copy_event_content(in_event, out_event, log_level, self_comp);
/*
* Try to set the debug-info fields based on debug information that is
const bt_stream *in_stream;
bt_message *out_message;
bt_stream *out_stream;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_stream = bt_message_stream_beginning_borrow_stream_const(in_message);
BT_ASSERT(in_stream);
out_message = bt_message_stream_beginning_create(
debug_it->input_iterator, out_stream);
if (!out_message) {
- BT_LOGE("Error creating output stream beginning message: "
+ BT_COMP_LOGE("Error creating output stream beginning message: "
"out-s-addr=%p", out_stream);
}
error:
const bt_stream *in_stream;
bt_message *out_message = NULL;
bt_stream *out_stream;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_stream = bt_message_stream_end_borrow_stream_const(in_message);
BT_ASSERT(in_stream);
out_message = bt_message_stream_end_create(debug_it->input_iterator,
out_stream);
if (!out_message) {
- BT_LOGE("Error creating output stream end message: out-s-addr=%p",
+ 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;
}
const bt_clock_snapshot *cs;
bt_message *out_message = NULL;
bt_packet *out_packet;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
const bt_packet *in_packet =
bt_message_packet_beginning_borrow_packet_const(in_message);
debug_it->input_iterator, out_packet);
}
if (!out_message) {
- BT_LOGE("Error creating output packet beginning message: "
+ BT_COMP_LOGE("Error creating output packet beginning message: "
"out-p-addr=%p", out_packet);
}
const bt_packet *in_packet;
bt_message *out_message = NULL;
bt_packet *out_packet;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_packet = bt_message_packet_end_borrow_packet_const(in_message);
BT_ASSERT(in_packet);
}
if (!out_message) {
- BT_LOGE("Error creating output packet end 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;
-
- 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_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;
-
- 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_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)
bt_property_availability prop_avail;
bt_message *out_message = NULL;
bt_stream *out_stream;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_stream = bt_message_discarded_events_borrow_stream_const(
in_message);
debug_it->input_iterator, out_stream);
}
if (!out_message) {
- BT_LOGE("Error creating output discarded events message: "
+ BT_COMP_LOGE("Error creating output discarded events message: "
"out-s-addr=%p", out_stream);
goto error;
}
bt_property_availability prop_avail;
bt_message *out_message = NULL;
bt_stream *out_stream;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_stream = bt_message_discarded_packets_borrow_stream_const(
in_message);
debug_it->input_iterator, out_stream);
}
if (!out_message) {
- BT_LOGE("Error creating output discarded packet message: "
+ BT_COMP_LOGE("Error creating output discarded packet message: "
"out-s-addr=%p", out_stream);
goto error;
}
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_self_component_status debug_info_comp_init(
- bt_self_component_filter *self_comp,
+bt_component_class_init_method_status debug_info_comp_init(
+ bt_self_component_filter *self_comp_flt,
const bt_value *params, __attribute__((unused)) void *init_method_data)
{
int ret;
struct debug_info_component *debug_info_comp;
- bt_self_component_status status = BT_SELF_COMPONENT_STATUS_OK;
+ bt_component_class_init_method_status status =
+ BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK;
+ bt_self_component_add_port_status add_port_status;
+ bt_self_component *self_comp =
+ bt_self_component_filter_as_self_component(self_comp_flt);
+ bt_logging_level log_level = bt_component_get_logging_level(
+ bt_self_component_as_component(self_comp));
- BT_LOGD("Initializing debug_info component: "
+
+ BT_COMP_LOGI("Initializing debug_info component: "
"comp-addr=%p, params-addr=%p", self_comp, params);
debug_info_comp = g_new0(struct debug_info_component, 1);
if (!debug_info_comp) {
- BT_LOGE_STR("Failed to allocate one debug_info component.");
+ BT_COMP_LOGE_STR("Failed to allocate one debug_info component.");
goto error;
}
- bt_self_component_set_data(
- bt_self_component_filter_as_self_component(self_comp),
- debug_info_comp);
+ debug_info_comp->log_level = log_level;
+ debug_info_comp->self_comp = self_comp;
+ bt_self_component_set_data(self_comp, debug_info_comp);
- status = bt_self_component_filter_add_input_port(self_comp, "in",
- NULL, NULL);
- if (status != BT_SELF_COMPONENT_STATUS_OK) {
+ add_port_status = bt_self_component_filter_add_input_port(
+ self_comp_flt, "in", NULL, NULL);
+ switch (add_port_status) {
+ case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR:
+ status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR;
+ goto error;
+ case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR:
+ status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR;
goto error;
+ default:
+ break;
}
- status = bt_self_component_filter_add_output_port(self_comp, "out",
- NULL, NULL);
- if (status != BT_SELF_COMPONENT_STATUS_OK) {
+ add_port_status = bt_self_component_filter_add_output_port(
+ self_comp_flt, "out", NULL, NULL);
+ switch (add_port_status) {
+ case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR:
+ status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR;
+ goto error;
+ case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR:
+ status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR;
goto error;
+ default:
+ break;
}
ret = init_from_params(debug_info_comp, params);
if (ret) {
- BT_LOGE("Cannot configure debug_info component: "
+ BT_COMP_LOGE("Cannot configure debug_info component: "
"debug_info-comp-addr=%p, params-addr=%p",
debug_info_comp, params);
goto error;
error:
destroy_debug_info_comp(debug_info_comp);
- bt_self_component_set_data(
- bt_self_component_filter_as_self_component(self_comp),
- NULL);
+ bt_self_component_set_data(self_comp, NULL);
- if (status == BT_SELF_COMPONENT_STATUS_OK) {
- status = BT_SELF_COMPONENT_STATUS_ERROR;
+ if (status == BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK) {
+ status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR;
}
end:
return status;
}
BT_HIDDEN
-void debug_info_comp_finalize(bt_self_component_filter *self_comp)
+void debug_info_comp_finalize(bt_self_component_filter *self_comp_flt)
{
struct debug_info_component *debug_info =
bt_self_component_get_data(
bt_self_component_filter_as_self_component(
- self_comp));
- BT_LOGD("Finalizing debug_info self_component: comp-addr=%p",
+ self_comp_flt));
+ bt_logging_level log_level = debug_info->log_level;
+ bt_self_component *self_comp = debug_info->self_comp;
+
+ BT_COMP_LOGI("Finalizing debug_info self_component: comp-addr=%p",
self_comp);
destroy_debug_info_comp(debug_info);
}
BT_HIDDEN
-bt_self_message_iterator_status debug_info_msg_iter_next(
+bt_component_class_message_iterator_next_method_status debug_info_msg_iter_next(
bt_self_message_iterator *self_msg_iter,
const bt_message_array_const msgs, uint64_t capacity,
uint64_t *count)
{
bt_self_component_port_input_message_iterator *upstream_iterator = NULL;
- bt_message_iterator_status upstream_iterator_ret_status;
+ bt_message_iterator_next_status upstream_iterator_ret_status;
struct debug_info_msg_iter *debug_info_msg_iter;
struct debug_info_component *debug_info = NULL;
- bt_self_message_iterator_status status;
+ bt_component_class_message_iterator_next_method_status status;
bt_self_component *self_comp = NULL;
bt_message_array_const input_msgs;
const bt_message *out_message;
uint64_t curr_msg_idx, i;
- status = BT_SELF_MESSAGE_ITERATOR_STATUS_OK;
+ status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
self_comp = bt_self_message_iterator_borrow_component(self_msg_iter);
BT_ASSERT(self_comp);
upstream_iterator_ret_status =
bt_self_component_port_input_message_iterator_next(
upstream_iterator, &input_msgs, count);
- if (upstream_iterator_ret_status != BT_MESSAGE_ITERATOR_STATUS_OK) {
+ if (upstream_iterator_ret_status !=
+ BT_MESSAGE_ITERATOR_NEXT_STATUS_OK) {
/*
- * No messages were returned. Not necessarily an error. Convert
- * the upstream message iterator status to a self status.
+ * No messages were returned. Not necessarily an error.
+ * Convert the upstream message iterator status to a
+ * self status.
*/
- status = bt_common_message_iterator_status_to_self(
- upstream_iterator_ret_status);
+ status = (int) upstream_iterator_ret_status;
goto end;
}
for (curr_msg_idx = 0; curr_msg_idx < *count; curr_msg_idx++) {
out_message = handle_message(debug_info_msg_iter,
- input_msgs[curr_msg_idx]);
+ input_msgs[curr_msg_idx]);
if (!out_message) {
goto handle_msg_error;
}
bt_message_put_ref(msgs[i]);
}
- status = BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM;
+ /*
+ * 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:
return status;
}
}
BT_HIDDEN
-bt_self_message_iterator_status debug_info_msg_iter_init(
+bt_component_class_message_iterator_init_method_status debug_info_msg_iter_init(
bt_self_message_iterator *self_msg_iter,
- bt_self_component_filter *self_comp,
+ bt_self_component_filter *self_comp_flt,
bt_self_component_port_output *self_port)
{
- bt_self_message_iterator_status status = BT_SELF_MESSAGE_ITERATOR_STATUS_OK;
+ bt_component_class_message_iterator_init_method_status status =
+ BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK;
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;
gchar *debug_info_field_name;
int ret;
+ bt_self_component *self_comp =
+ bt_self_component_filter_as_self_component(self_comp_flt);
+ bt_logging_level log_level = bt_component_get_logging_level(
+ bt_self_component_as_component(self_comp));
/* Borrow the upstream input port. */
input_port = bt_self_component_filter_borrow_input_port_by_name(
- self_comp, "in");
+ self_comp_flt, "in");
if (!input_port) {
- status = BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
+ status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_ERROR;
goto error;
}
debug_info_msg_iter = g_new0(struct debug_info_msg_iter, 1);
if (!debug_info_msg_iter) {
- status = BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM;
+ status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
goto error;
}
+ debug_info_msg_iter->log_level = log_level;
+ 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);
+ upstream_iterator = bt_self_component_port_input_message_iterator_create_from_message_iterator(
+ self_msg_iter, input_port);
if (!upstream_iterator) {
- status = BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM;
+ status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
goto error;
}
g_direct_hash, g_direct_equal, (GDestroyNotify) NULL,
(GDestroyNotify) debug_info_destroy);
if (!debug_info_msg_iter->debug_info_map) {
- status = BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM;
+ status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
goto error;
}
- debug_info_msg_iter->self_comp =
- bt_self_component_filter_as_self_component(self_comp);
-
- debug_info_msg_iter->debug_info_component = bt_self_component_get_data(
- bt_self_component_filter_as_self_component(
- self_comp));
+ debug_info_msg_iter->debug_info_component =
+ bt_self_component_get_data(self_comp);
debug_info_field_name =
debug_info_msg_iter->debug_info_component->arg_debug_info_field_name;
- debug_info_msg_iter->ir_maps = trace_ir_maps_create(
- bt_self_component_filter_as_self_component(self_comp),
- debug_info_field_name);
+ debug_info_msg_iter->ir_maps = trace_ir_maps_create(self_comp,
+ debug_info_field_name, log_level);
if (!debug_info_msg_iter->ir_maps) {
- status = BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM;
+ status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
goto error;
}
- ret = bt_fd_cache_init(&debug_info_msg_iter->fd_cache);
+ ret = bt_fd_cache_init(&debug_info_msg_iter->fd_cache, log_level);
if (ret) {
- status = BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM;
+ status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
goto error;
}
error:
debug_info_msg_iter_destroy(debug_info_msg_iter);
+
end:
return status;
}
}
BT_HIDDEN
-bt_self_message_iterator_status debug_info_msg_iter_seek_beginning(
+bt_component_class_message_iterator_seek_beginning_method_status debug_info_msg_iter_seek_beginning(
bt_self_message_iterator *self_msg_iter)
{
struct debug_info_msg_iter *debug_info_msg_iter =
bt_self_message_iterator_get_data(self_msg_iter);
- bt_message_iterator_status status = BT_MESSAGE_ITERATOR_STATUS_OK;
+ bt_component_class_message_iterator_seek_beginning_method_status status =
+ BT_COMPONENT_CLASS_MESSAGE_ITERATOR_SEEK_BEGINNING_METHOD_STATUS_OK;
+ bt_message_iterator_seek_beginning_status seek_beg_status;
BT_ASSERT(debug_info_msg_iter);
/* Ask the upstream component to seek to the beginning. */
- status = bt_self_component_port_input_message_iterator_seek_beginning(
+ seek_beg_status = bt_self_component_port_input_message_iterator_seek_beginning(
debug_info_msg_iter->msg_iter);
- if (status != BT_MESSAGE_ITERATOR_STATUS_OK) {
+ if (seek_beg_status != BT_MESSAGE_ITERATOR_SEEK_BEGINNING_STATUS_OK) {
+ status = (int) seek_beg_status;
goto end;
}
/* Clear this iterator data. */
trace_ir_maps_clear(debug_info_msg_iter->ir_maps);
g_hash_table_remove_all(debug_info_msg_iter->debug_info_map);
+
end:
- return bt_common_message_iterator_status_to_self(status);
+ return status;
}
BT_HIDDEN