#include <babeltrace/graph/notification-iterator.h>
#include <babeltrace/graph/private-notification-iterator.h>
+#include <babeltrace/graph/connection.h>
#include <babeltrace/graph/notification.h>
#include <babeltrace/graph/notification-event.h>
#include <babeltrace/graph/notification-stream.h>
writer_packet);
assert(new_notification);
bt_put(packet);
- bt_put(writer_packet);
break;
}
case BT_NOTIFICATION_TYPE_EVENT:
bt_put(writer_stream);
break;
}
+ case BT_NOTIFICATION_TYPE_INACTIVITY:
+ {
+ new_notification = bt_get(notification);
+ break;
+ }
default:
puts("Unhandled notification type");
}
return ret;
}
-/*
-static
-struct bt_notification *debug_info_iterator_get(
- struct bt_private_notification_iterator *iterator)
-{
- struct debug_info_iterator *debug_it;
-
- debug_it = bt_private_notification_iterator_get_user_data(iterator);
- assert(debug_it);
-
- if (!debug_it->current_notification) {
- enum bt_notification_iterator_status it_ret;
-
- it_ret = debug_info_iterator_next(iterator);
- if (it_ret) {
- goto end;
- }
- }
-
-end:
- return bt_get(debug_it->current_notification);
-}
-*/
-
static
enum bt_notification_iterator_status debug_info_iterator_init(
struct bt_private_notification_iterator *iterator,
enum bt_notification_iterator_status ret =
BT_NOTIFICATION_ITERATOR_STATUS_OK;
enum bt_notification_iterator_status it_ret;
- struct bt_private_port *input_port = NULL;
+ 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);
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_END,
+ BT_NOTIFICATION_TYPE_PACKET_BEGIN,
+ BT_NOTIFICATION_TYPE_PACKET_END,
+ BT_NOTIFICATION_TYPE_SENTINEL,
+ };
if (!it_data) {
ret = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM;
goto end;
}
- /* Create a new iterator on the upstream component. */
input_port = bt_private_component_filter_get_input_private_port_by_name(
- component, "in");
- assert(input_port);
+ component, "in");
+ if (!input_port) {
+ ret = BT_NOTIFICATION_ITERATOR_STATUS_ERROR;
+ goto end;
+ }
+
connection = bt_private_port_get_private_connection(input_port);
- assert(connection);
+ bt_put(input_port);
+ if (!connection) {
+ ret = BT_NOTIFICATION_ITERATOR_STATUS_ERROR;
+ goto end;
+ }
- it_data->input_iterator = bt_private_connection_create_notification_iterator(
- connection, NULL);
- if (!it_data->input_iterator) {
- ret = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM;
+ conn_status = bt_private_connection_create_notification_iterator(
+ connection, notif_types, &it_data->input_iterator);
+ if (conn_status != BT_CONNECTION_STATUS_OK) {
+ ret = BT_NOTIFICATION_ITERATOR_STATUS_ERROR;
goto end;
}
+
it_data->debug_info_component = (struct debug_info_component *)
bt_private_component_get_user_data(component);
-
it_data->err = it_data->debug_info_component->err;
it_data->trace_map = g_hash_table_new_full(g_direct_hash,
g_direct_equal, NULL, (GDestroyNotify) unref_trace);
end:
bt_put(connection);
- bt_put(input_port);
+ bt_put(component);
return ret;
}
value = bt_value_map_get(params, "full-path");
if (value) {
enum bt_value_status value_ret;
+ bt_bool bool_val;
value_ret = bt_value_bool_get(value,
- &debug_info_component->arg_full_path);
+ &bool_val);
if (value_ret) {
ret = BT_COMPONENT_STATUS_INVALID;
printf_error("Failed to retrieve full-path value. "
"Expecting a boolean");
}
+
+ debug_info_component->arg_full_path = bool_val;
}
bt_put(value);
if (ret != BT_COMPONENT_STATUS_OK) {
goto error;
}
+ ret = bt_private_component_filter_add_input_private_port(
+ component, "in", NULL, NULL);
+ if (ret != BT_COMPONENT_STATUS_OK) {
+ goto end;
+ }
+
+ ret = bt_private_component_filter_add_output_private_port(
+ component, "out", NULL, NULL);
+ if (ret != BT_COMPONENT_STATUS_OK) {
+ goto end;
+ }
+
ret = init_from_params(debug_info, params);
end:
return ret;