X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fgraph%2Fcomponent-class-sink-colander.c;h=c6c128791bb14d27617e7d25f2cfa0ac192c69f4;hb=d4393e0875e7b08f6ee97d617cc5f2c9286742a4;hp=e9e23d54ac065a069fa5dc917f48e12b7aa98f67;hpb=26e21a82c47a15d1080dc142cb20c0b0b0b5a929;p=babeltrace.git diff --git a/lib/graph/component-class-sink-colander.c b/lib/graph/component-class-sink-colander.c index e9e23d54..c6c12879 100644 --- a/lib/graph/component-class-sink-colander.c +++ b/lib/graph/component-class-sink-colander.c @@ -39,8 +39,8 @@ static struct bt_component_class *colander_comp_cls; struct colander_data { - struct bt_notification **user_notif; - enum bt_notification_type *notif_types; + bt_notification_array notifs; + uint64_t *count_addr; struct bt_notification_iterator *notif_iter; }; @@ -67,7 +67,8 @@ enum bt_component_status colander_init( goto end; } - colander_data->user_notif = user_provided_data->notification; + colander_data->notifs = user_provided_data->notifs; + colander_data->count_addr = user_provided_data->count_addr; status = bt_private_component_sink_add_input_private_port( priv_comp, "in", NULL, NULL); if (status != BT_COMPONENT_STATUS_OK) { @@ -95,7 +96,6 @@ void colander_finalize(struct bt_private_component *priv_comp) bt_put(colander_data->notif_iter); } - g_free(colander_data->notif_types); g_free(colander_data); } @@ -131,9 +131,9 @@ enum bt_component_status colander_consume( { enum bt_component_status status = BT_COMPONENT_STATUS_OK; enum bt_notification_iterator_status notif_iter_status; - struct bt_notification *notif = NULL; struct colander_data *colander_data = bt_private_component_get_user_data(priv_comp); + bt_notification_array notifs; BT_ASSERT(colander_data); @@ -144,7 +144,7 @@ enum bt_component_status colander_consume( } notif_iter_status = bt_private_connection_notification_iterator_next( - colander_data->notif_iter, ¬if); + colander_data->notif_iter, ¬ifs, colander_data->count_addr); switch (notif_iter_status) { case BT_NOTIFICATION_ITERATOR_STATUS_CANCELED: status = BT_COMPONENT_STATUS_OK; @@ -156,17 +156,17 @@ enum bt_component_status colander_consume( status = BT_COMPONENT_STATUS_END; goto end; case BT_NOTIFICATION_ITERATOR_STATUS_OK: + /* Move notifications to user (count already set) */ + memcpy(colander_data->notifs, notifs, + sizeof(*notifs) * *colander_data->count_addr); break; default: status = BT_COMPONENT_STATUS_ERROR; goto end; } - BT_ASSERT(notif); - end: /* Move notification to user's pointer, even if NULL. */ - *colander_data->user_notif = notif; return status; }