X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Flttng-utils%2Fplugin.c;h=f6ec53d3ba03696739e3a0c18a31750b2816be63;hb=601b0d3c9a6bf91274d0f01ccdec7fecfe3ed310;hp=c6e75f59f122a929ac30965b19dc57afa3fe9d0a;hpb=504db471cbe39293f9abbab8353646906127292b;p=babeltrace.git diff --git a/plugins/lttng-utils/plugin.c b/plugins/lttng-utils/plugin.c index c6e75f59..f6ec53d3 100644 --- a/plugins/lttng-utils/plugin.c +++ b/plugins/lttng-utils/plugin.c @@ -26,24 +26,26 @@ * SOFTWARE. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#define BT_LOG_TAG "PLUGIN-CTF-LTTNG-UTILS-DEBUG-INFO-FLT" +#include "logging.h" + +#include #include -#include +#include #include "debug-info.h" #include "copy.h" +static +gboolean empty_trace_map(gpointer key, gpointer value, gpointer user_data) +{ + struct debug_info_trace *di_trace = value; + + di_trace->trace_static = 1; + debug_info_close_trace(di_trace->debug_it, di_trace); + + return TRUE; +} + static void destroy_debug_info_data(struct debug_info_component *debug_info) { @@ -76,30 +78,29 @@ end: static void unref_trace(struct debug_info_trace *di_trace) { - bt_put(di_trace->trace); + bt_object_put_ref(di_trace->writer_trace); + g_free(di_trace); } static -void debug_info_iterator_destroy(struct bt_private_notification_iterator *it) +void debug_info_iterator_destroy(struct bt_private_connection_private_notification_iterator *it) { struct debug_info_iterator *it_data; - it_data = bt_private_notification_iterator_get_user_data(it); - assert(it_data); + it_data = bt_private_connection_private_notification_iterator_get_user_data(it); + BT_ASSERT(it_data); if (it_data->input_iterator_group) { g_ptr_array_free(it_data->input_iterator_group, TRUE); } - bt_put(it_data->current_notification); - bt_put(it_data->input_iterator); + + g_hash_table_foreach_remove(it_data->trace_map, + empty_trace_map, it_data); g_hash_table_destroy(it_data->trace_map); - /* - * TODO - g_hash_table_destroy(it_data->stream_map); - g_hash_table_destroy(it_data->stream_class_map); - g_hash_table_destroy(it_data->packet_map); - g_hash_table_destroy(it_data->trace_debug_map); - */ + + bt_object_put_ref(it_data->current_notification); + bt_object_put_ref(it_data->input_iterator); + g_free(it_data); } @@ -113,45 +114,47 @@ struct bt_notification *handle_notification(FILE *err, switch (bt_notification_get_type(notification)) { case BT_NOTIFICATION_TYPE_PACKET_BEGIN: { - struct bt_ctf_packet *packet = + struct bt_packet *packet = bt_notification_packet_begin_get_packet(notification); - struct bt_ctf_packet *writer_packet; + struct bt_packet *writer_packet; if (!packet) { goto end; } writer_packet = debug_info_new_packet(debug_it, packet); - assert(writer_packet); + BT_ASSERT(writer_packet); new_notification = bt_notification_packet_begin_create( writer_packet); - assert(new_notification); - bt_put(packet); + BT_ASSERT(new_notification); + bt_object_put_ref(packet); + bt_object_put_ref(writer_packet); break; } case BT_NOTIFICATION_TYPE_PACKET_END: { - struct bt_ctf_packet *packet = + struct bt_packet *packet = bt_notification_packet_end_get_packet(notification); - struct bt_ctf_packet *writer_packet; + struct bt_packet *writer_packet; if (!packet) { goto end; } writer_packet = debug_info_close_packet(debug_it, packet); - assert(writer_packet); + BT_ASSERT(writer_packet); new_notification = bt_notification_packet_end_create( writer_packet); - assert(new_notification); - bt_put(packet); + BT_ASSERT(new_notification); + bt_object_put_ref(packet); + bt_object_put_ref(writer_packet); break; } case BT_NOTIFICATION_TYPE_EVENT: { - struct bt_ctf_event *event = bt_notification_event_get_event( + struct bt_event *event = bt_notification_event_get_event( notification); - struct bt_ctf_event *writer_event; + struct bt_event *writer_event; struct bt_clock_class_priority_map *cc_prio_map = bt_notification_event_get_clock_class_priority_map( notification); @@ -160,60 +163,56 @@ struct bt_notification *handle_notification(FILE *err, goto end; } writer_event = debug_info_output_event(debug_it, event); - assert(writer_event); + BT_ASSERT(writer_event); new_notification = bt_notification_event_create(writer_event, cc_prio_map); - bt_put(cc_prio_map); - assert(new_notification); - bt_put(event); - bt_put(writer_event); + bt_object_put_ref(cc_prio_map); + BT_ASSERT(new_notification); + bt_object_put_ref(event); + bt_object_put_ref(writer_event); break; } case BT_NOTIFICATION_TYPE_STREAM_BEGIN: { - struct bt_ctf_stream *stream = + struct bt_stream *stream = bt_notification_stream_begin_get_stream(notification); - struct bt_ctf_stream *writer_stream; + struct bt_stream *writer_stream; if (!stream) { goto end; } writer_stream = debug_info_stream_begin(debug_it, stream); - assert(writer_stream); + BT_ASSERT(writer_stream); new_notification = bt_notification_stream_begin_create( writer_stream); - assert(new_notification); - bt_put(stream); - bt_put(writer_stream); + BT_ASSERT(new_notification); + bt_object_put_ref(stream); + bt_object_put_ref(writer_stream); break; } case BT_NOTIFICATION_TYPE_STREAM_END: { - struct bt_ctf_stream *stream = + struct bt_stream *stream = bt_notification_stream_end_get_stream(notification); - struct bt_ctf_stream *writer_stream; + struct bt_stream *writer_stream; if (!stream) { goto end; } writer_stream = debug_info_stream_end(debug_it, stream); - assert(writer_stream); + BT_ASSERT(writer_stream); new_notification = bt_notification_stream_end_create( writer_stream); - assert(new_notification); - bt_put(stream); - bt_put(writer_stream); - break; - } - case BT_NOTIFICATION_TYPE_INACTIVITY: - { - new_notification = bt_get(notification); + BT_ASSERT(new_notification); + bt_object_put_ref(stream); + bt_object_put_ref(writer_stream); break; } default: - puts("Unhandled notification type"); + new_notification = bt_object_get_ref(notification); + break; } end: @@ -221,26 +220,26 @@ end: } static -struct bt_notification_iterator_next_return debug_info_iterator_next( - struct bt_private_notification_iterator *iterator) +struct bt_notification_iterator_next_method_return debug_info_iterator_next( + struct bt_private_connection_private_notification_iterator *iterator) { struct debug_info_iterator *debug_it = NULL; struct bt_private_component *component = NULL; struct debug_info_component *debug_info = NULL; struct bt_notification_iterator *source_it = NULL; struct bt_notification *notification; - struct bt_notification_iterator_next_return ret = { + struct bt_notification_iterator_next_method_return ret = { .status = BT_NOTIFICATION_ITERATOR_STATUS_OK, .notification = NULL, }; - debug_it = bt_private_notification_iterator_get_user_data(iterator); - assert(debug_it); + debug_it = bt_private_connection_private_notification_iterator_get_user_data(iterator); + BT_ASSERT(debug_it); - component = bt_private_notification_iterator_get_private_component(iterator); - assert(component); + component = bt_private_connection_private_notification_iterator_get_private_component(iterator); + BT_ASSERT(component); debug_info = bt_private_component_get_user_data(component); - assert(debug_info); + BT_ASSERT(debug_info); source_it = debug_it->input_iterator; @@ -258,17 +257,17 @@ struct bt_notification_iterator_next_return debug_info_iterator_next( ret.notification = handle_notification(debug_info->err, debug_it, notification); - assert(ret.notification); - bt_put(notification); + BT_ASSERT(ret.notification); + bt_object_put_ref(notification); end: - bt_put(component); + bt_object_put_ref(component); return ret; } static enum bt_notification_iterator_status debug_info_iterator_init( - struct bt_private_notification_iterator *iterator, + struct bt_private_connection_private_notification_iterator *iterator, struct bt_private_port *port) { enum bt_notification_iterator_status ret = @@ -277,17 +276,9 @@ enum bt_notification_iterator_status debug_info_iterator_init( enum bt_connection_status conn_status; struct bt_private_connection *connection = NULL; struct bt_private_component *component = - bt_private_notification_iterator_get_private_component(iterator); + bt_private_connection_private_notification_iterator_get_private_component(iterator); struct debug_info_iterator *it_data = g_new0(struct debug_info_iterator, 1); struct bt_private_port *input_port; - static const enum bt_notification_type notif_types[] = { - BT_NOTIFICATION_TYPE_EVENT, - BT_NOTIFICATION_TYPE_STREAM_BEGIN, - BT_NOTIFICATION_TYPE_STREAM_END, - BT_NOTIFICATION_TYPE_PACKET_BEGIN, - BT_NOTIFICATION_TYPE_PACKET_END, - BT_NOTIFICATION_TYPE_SENTINEL, - }; if (!it_data) { ret = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM; @@ -302,14 +293,14 @@ enum bt_notification_iterator_status debug_info_iterator_init( } connection = bt_private_port_get_private_connection(input_port); - bt_put(input_port); + bt_object_put_ref(input_port); if (!connection) { ret = BT_NOTIFICATION_ITERATOR_STATUS_ERROR; goto end; } conn_status = bt_private_connection_create_notification_iterator( - connection, notif_types, &it_data->input_iterator); + connection, &it_data->input_iterator); if (conn_status != BT_CONNECTION_STATUS_OK) { ret = BT_NOTIFICATION_ITERATOR_STATUS_ERROR; goto end; @@ -321,14 +312,14 @@ enum bt_notification_iterator_status debug_info_iterator_init( it_data->trace_map = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) unref_trace); - it_ret = bt_private_notification_iterator_set_user_data(iterator, it_data); + it_ret = bt_private_connection_private_notification_iterator_set_user_data(iterator, it_data); if (it_ret) { goto end; } end: - bt_put(connection); - bt_put(component); + bt_object_put_ref(connection); + bt_object_put_ref(component); return ret; } @@ -340,27 +331,23 @@ enum bt_component_status init_from_params( struct bt_value *value = NULL; enum bt_component_status ret = BT_COMPONENT_STATUS_OK; - assert(params); + BT_ASSERT(params); value = bt_value_map_get(params, "debug-info-field-name"); if (value) { enum bt_value_status value_ret; const char *tmp; - value_ret = bt_value_string_get(value, &tmp); - if (value_ret) { - ret = BT_COMPONENT_STATUS_INVALID; - printf_error("Failed to retrieve debug-info-field-name value. " - "Expecting a string"); - } + tmp = bt_value_string_get(value); strcpy(debug_info_component->arg_debug_info_field_name, tmp); - bt_put(value); + bt_object_put_ref(value); } else { debug_info_component->arg_debug_info_field_name = malloc(strlen("debug_info") + 1); if (!debug_info_component->arg_debug_info_field_name) { ret = BT_COMPONENT_STATUS_NOMEM; - printf_error(); + BT_LOGE_STR("Missing field name."); + goto end; } sprintf(debug_info_component->arg_debug_info_field_name, "debug_info"); @@ -369,19 +356,13 @@ enum bt_component_status init_from_params( goto end; } - value = bt_value_map_get(params, "debug-dir"); + value = bt_value_map_get(params, "debug-info-dir"); if (value) { enum bt_value_status value_ret; - value_ret = bt_value_string_get(value, - &debug_info_component->arg_debug_dir); - if (value_ret) { - ret = BT_COMPONENT_STATUS_INVALID; - printf_error("Failed to retrieve debug-dir value. " - "Expecting a string"); - } + debug_info_component->arg_debug_dir = bt_value_string_get(value); } - bt_put(value); + bt_object_put_ref(value); if (ret != BT_COMPONENT_STATUS_OK) { goto end; } @@ -390,15 +371,9 @@ enum bt_component_status init_from_params( if (value) { enum bt_value_status value_ret; - value_ret = bt_value_string_get(value, - &debug_info_component->arg_target_prefix); - if (value_ret) { - ret = BT_COMPONENT_STATUS_INVALID; - printf_error("Failed to retrieve target-prefix value. " - "Expecting a string"); - } + debug_info_component->arg_target_prefix = bt_value_string_get(value); } - bt_put(value); + bt_object_put_ref(value); if (ret != BT_COMPONENT_STATUS_OK) { goto end; } @@ -408,17 +383,11 @@ enum bt_component_status init_from_params( enum bt_value_status value_ret; bt_bool bool_val; - value_ret = bt_value_bool_get(value, - &bool_val); - if (value_ret) { - ret = BT_COMPONENT_STATUS_INVALID; - printf_error("Failed to retrieve full-path value. " - "Expecting a boolean"); - } + bool_val = bt_value_bool_get(value); debug_info_component->arg_full_path = bool_val; } - bt_put(value); + bt_object_put_ref(value); if (ret != BT_COMPONENT_STATUS_OK) { goto end; } @@ -464,6 +433,10 @@ error: return ret; } +#ifndef BT_BUILT_IN_PLUGINS +BT_PLUGIN_MODULE(); +#endif + /* Initialize plug-in entry points. */ BT_PLUGIN_WITH_ID(lttng_utils, "lttng-utils"); BT_PLUGIN_DESCRIPTION_WITH_ID(lttng_utils, "LTTng utilities");