X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Ftext%2Fdetails%2Fdetails.c;h=550ae9d925fb69c67e943bc3b7ed5caf8fa8c36c;hb=ecd7492f21a492b70569d5ecc1d3a808241b63f0;hp=a5fa2c527c561d42fc44fa774d4ac7d2bbfa9584;hpb=c7f21c12d5cec35f3e48630cf603207748409847;p=babeltrace.git diff --git a/src/plugins/text/details/details.c b/src/plugins/text/details/details.c index a5fa2c52..550ae9d9 100644 --- a/src/plugins/text/details/details.c +++ b/src/plugins/text/details/details.c @@ -30,7 +30,6 @@ #define WITH_UUID_PARAM_NAME "with-uuid" #define COMPACT_PARAM_NAME "compact" -BT_HIDDEN void details_destroy_details_trace_class_meta( struct details_trace_class_meta *details_tc_meta) { @@ -49,7 +48,6 @@ end: return; } -BT_HIDDEN struct details_trace_class_meta *details_create_details_trace_class_meta(void) { struct details_trace_class_meta *details_tc_meta = @@ -188,7 +186,6 @@ end: return details_comp; } -BT_HIDDEN void details_finalize(bt_self_component_sink *comp) { struct details_comp *details_comp; @@ -201,7 +198,8 @@ void details_finalize(bt_self_component_sink *comp) } static -void configure_bool_opt(struct details_comp *details_comp, +void configure_bool_opt( + struct details_comp *details_comp __attribute__((unused)), const bt_value *params, const char *param_name, bool default_value, bool *opt_value) { @@ -334,33 +332,46 @@ void log_configuration(bt_self_component_sink *comp, BT_COMP_LOGI(" With UUID: %d", details_comp->cfg.with_uuid); } -BT_HIDDEN bt_component_class_initialize_method_status details_init( bt_self_component_sink *comp, - bt_self_component_sink_configuration *config, + bt_self_component_sink_configuration *config __attribute__((unused)), const bt_value *params, - __attribute__((unused)) void *init_method_data) + void *init_method_data __attribute__((unused))) { - bt_component_class_initialize_method_status status = - BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; + bt_component_class_initialize_method_status status; bt_self_component_add_port_status add_port_status; - struct details_comp *details_comp = NULL; + struct details_comp *details_comp; + bt_self_component *self_comp = + bt_self_component_sink_as_self_component(comp); + bt_logging_level log_level = + bt_component_get_logging_level( + bt_self_component_as_component(self_comp)); + + details_comp = create_details_comp(comp); + if (!details_comp) { + /* + * Don't use BT_COMP_LOGE_APPEND_CAUSE, as `details_comp` is not + * initialized yet. + */ + BT_COMP_LOG_CUR_LVL(BT_LOG_ERROR, log_level, self_comp, + "Failed to allocate component."); + BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_COMPONENT( + self_comp, "Failed to allocate component."); + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; + goto error; + } add_port_status = bt_self_component_sink_add_input_port(comp, IN_PORT_NAME, NULL, NULL); if (add_port_status != BT_SELF_COMPONENT_ADD_PORT_STATUS_OK) { + BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Failed to add input port."); status = (int) add_port_status; goto error; } - details_comp = create_details_comp(comp); - if (!details_comp) { - status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; - goto error; - } - - if (configure_details_comp(details_comp, params)) { - BT_COMP_LOGE_STR("Failed to configure component."); + status = configure_details_comp(details_comp, params); + if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) { + BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Failed to configure component."); goto error; } @@ -370,17 +381,12 @@ bt_component_class_initialize_method_status details_init( goto end; error: - if (status == BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) { - status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; - } - destroy_details_comp(details_comp); end: return status; } -BT_HIDDEN bt_component_class_sink_graph_is_configured_method_status details_graph_is_configured(bt_self_component_sink *comp) { @@ -388,26 +394,28 @@ details_graph_is_configured(bt_self_component_sink *comp) bt_message_iterator_create_from_sink_component_status msg_iter_status; bt_message_iterator *iterator; - struct details_comp *details_comp; bt_self_component_port_input *in_port; + bt_self_component *self_comp = + bt_self_component_sink_as_self_component(comp); + struct details_comp *details_comp = bt_self_component_get_data(self_comp); - details_comp = bt_self_component_get_data( - bt_self_component_sink_as_self_component(comp)); BT_ASSERT(details_comp); + in_port = bt_self_component_sink_borrow_input_port_by_name(comp, IN_PORT_NAME); if (!bt_port_is_connected(bt_port_input_as_port_const( bt_self_component_port_input_as_port_input(in_port)))) { - BT_COMP_LOGE("Single input port is not connected: " + BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Single input port is not connected: " "port-name=\"%s\"", IN_PORT_NAME); status = BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_ERROR; goto end; } msg_iter_status = bt_message_iterator_create_from_sink_component( - comp, bt_self_component_sink_borrow_input_port_by_name(comp, - IN_PORT_NAME), &iterator); + comp, in_port, &iterator); if (msg_iter_status != BT_MESSAGE_ITERATOR_CREATE_FROM_SINK_COMPONENT_STATUS_OK) { + BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Failed to create message iterator: " + "port-name=\"%s\"", IN_PORT_NAME); status = (int) msg_iter_status; goto end; } @@ -421,72 +429,56 @@ end: return status; } -BT_HIDDEN bt_component_class_sink_consume_method_status details_consume(bt_self_component_sink *comp) { - bt_component_class_sink_consume_method_status ret = - BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_OK; + bt_component_class_sink_consume_method_status status; bt_message_array_const msgs; uint64_t count; - struct details_comp *details_comp; bt_message_iterator_next_status next_status; uint64_t i; + bt_self_component *self_comp = bt_self_component_sink_as_self_component(comp); + struct details_comp *details_comp = bt_self_component_get_data(self_comp); - details_comp = bt_self_component_get_data( - bt_self_component_sink_as_self_component(comp)); BT_ASSERT_DBG(details_comp); BT_ASSERT_DBG(details_comp->msg_iter); /* Consume messages */ next_status = bt_message_iterator_next( details_comp->msg_iter, &msgs, &count); - switch (next_status) { - case BT_MESSAGE_ITERATOR_NEXT_STATUS_OK: - ret = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_OK; - - for (i = 0; i < count; i++) { - int print_ret = details_write_message(details_comp, - msgs[i]); - - if (print_ret) { - for (; i < count; i++) { - /* Put all remaining messages */ - bt_message_put_ref(msgs[i]); - } + if (next_status != BT_MESSAGE_ITERATOR_NEXT_STATUS_OK) { + status = (int) next_status; + goto end; + } - ret = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR; - goto end; - } + for (i = 0; i < count; i++) { + int print_ret = details_write_message(details_comp, + msgs[i]); - /* Print output buffer to standard output and flush */ - if (details_comp->str->len > 0) { - printf("%s", details_comp->str->str); - fflush(stdout); - details_comp->printed_something = true; + if (print_ret) { + for (; i < count; i++) { + /* Put all remaining messages */ + bt_message_put_ref(msgs[i]); } - /* Put this message */ - bt_message_put_ref(msgs[i]); + BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Failed to write message."); + status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR; + goto end; } - break; - case BT_MESSAGE_ITERATOR_NEXT_STATUS_AGAIN: - ret = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_AGAIN; - goto end; - case BT_MESSAGE_ITERATOR_NEXT_STATUS_END: - ret = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_END; - goto end; - case BT_MESSAGE_ITERATOR_NEXT_STATUS_ERROR: - ret = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR; - goto end; - case BT_MESSAGE_ITERATOR_NEXT_STATUS_MEMORY_ERROR: - ret = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_MEMORY_ERROR; - goto end; - default: - bt_common_abort(); + /* Print output buffer to standard output and flush */ + if (details_comp->str->len > 0) { + printf("%s", details_comp->str->str); + fflush(stdout); + details_comp->printed_something = true; + } + + /* Put this message */ + bt_message_put_ref(msgs[i]); } + status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_OK; + end: - return ret; + return status; }