X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fplugin%2Fplugin-so.c;h=4fc939e5b13cfb182ed7960e01b2c8c58856c62c;hb=41a2b7aeccec8153fc6845819a0ca98461f35cb1;hp=9a2a7cc8cd3c7bdb0cda81d335daba13b38825a0;hpb=279b3f153f459cb582232e9c29ca4b5b19237f2a;p=babeltrace.git diff --git a/lib/plugin/plugin-so.c b/lib/plugin/plugin-so.c index 9a2a7cc8..4fc939e5 100644 --- a/lib/plugin/plugin-so.c +++ b/lib/plugin/plugin-so.c @@ -188,7 +188,7 @@ end: return shared_lib_handle; } -BT_HIDDEN +static void bt_plugin_so_destroy_spec_data(struct bt_plugin *plugin) { struct bt_plugin_so_spec_data *spec = plugin->spec_data; @@ -251,9 +251,10 @@ enum bt_plugin_status bt_plugin_so_init( const char *description; const char *help; bt_component_class_init_method init_method; - bt_component_class_destroy_method destroy_method; - bt_component_class_filter_add_iterator_method filter_add_iterator_method; - bt_component_class_sink_add_iterator_method sink_add_iterator_method; + bt_component_class_finalize_method finalize_method; + bt_component_class_query_method query_method; + bt_component_class_accept_port_connection_method accept_port_connection_method; + bt_component_class_port_disconnected_method port_disconnected_method; struct bt_component_class_iterator_methods iterator_methods; }; @@ -374,25 +375,29 @@ enum bt_plugin_status bt_plugin_so_init( cc_full_descr->init_method = cur_cc_descr_attr->value.init_method; break; - case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESTROY_METHOD: - cc_full_descr->destroy_method = - cur_cc_descr_attr->value.destroy_method; + case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FINALIZE_METHOD: + cc_full_descr->finalize_method = + cur_cc_descr_attr->value.finalize_method; + break; + case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD: + cc_full_descr->query_method = + cur_cc_descr_attr->value.query_method; break; - case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD: - cc_full_descr->filter_add_iterator_method = - cur_cc_descr_attr->value.filter_add_iterator_method; + case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_ACCEPT_PORT_CONNECTION_METHOD: + cc_full_descr->accept_port_connection_method = + cur_cc_descr_attr->value.accept_port_connection_method; break; - case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD: - cc_full_descr->sink_add_iterator_method = - cur_cc_descr_attr->value.sink_add_iterator_method; + case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_PORT_DISCONNECTED_METHOD: + cc_full_descr->port_disconnected_method = + cur_cc_descr_attr->value.port_disconnected_method; break; case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD: cc_full_descr->iterator_methods.init = cur_cc_descr_attr->value.notif_iter_init_method; break; - case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_DESTROY_METHOD: - cc_full_descr->iterator_methods.destroy = - cur_cc_descr_attr->value.notif_iter_destroy_method; + case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_FINALIZE_METHOD: + cc_full_descr->iterator_methods.finalize = + cur_cc_descr_attr->value.notif_iter_finalize_method; break; case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_SEEK_TIME_METHOD: cc_full_descr->iterator_methods.seek_time = @@ -434,13 +439,11 @@ enum bt_plugin_status bt_plugin_so_init( case BT_COMPONENT_CLASS_TYPE_SOURCE: comp_class = bt_component_class_source_create( cc_full_descr->descriptor->name, - cc_full_descr->descriptor->methods.source.notif_iter_get, cc_full_descr->descriptor->methods.source.notif_iter_next); break; case BT_COMPONENT_CLASS_TYPE_FILTER: comp_class = bt_component_class_filter_create( cc_full_descr->descriptor->name, - cc_full_descr->descriptor->methods.source.notif_iter_get, cc_full_descr->descriptor->methods.source.notif_iter_next); break; case BT_COMPONENT_CLASS_TYPE_SINK: @@ -491,9 +494,39 @@ enum bt_plugin_status bt_plugin_so_init( } } - if (cc_full_descr->destroy_method) { - ret = bt_component_class_set_destroy_method(comp_class, - cc_full_descr->destroy_method); + if (cc_full_descr->finalize_method) { + ret = bt_component_class_set_finalize_method(comp_class, + cc_full_descr->finalize_method); + if (ret) { + status = BT_PLUGIN_STATUS_ERROR; + BT_PUT(comp_class); + goto end; + } + } + + if (cc_full_descr->query_method) { + ret = bt_component_class_set_query_method( + comp_class, cc_full_descr->query_method); + if (ret) { + status = BT_PLUGIN_STATUS_ERROR; + BT_PUT(comp_class); + goto end; + } + } + + if (cc_full_descr->accept_port_connection_method) { + ret = bt_component_class_set_accept_port_connection_method( + comp_class, cc_full_descr->accept_port_connection_method); + if (ret) { + status = BT_PLUGIN_STATUS_ERROR; + BT_PUT(comp_class); + goto end; + } + } + + if (cc_full_descr->port_disconnected_method) { + ret = bt_component_class_set_port_disconnected_method( + comp_class, cc_full_descr->port_disconnected_method); if (ret) { status = BT_PLUGIN_STATUS_ERROR; BT_PUT(comp_class); @@ -514,10 +547,10 @@ enum bt_plugin_status bt_plugin_so_init( } } - if (cc_full_descr->iterator_methods.destroy) { - ret = bt_component_class_source_set_notification_iterator_destroy_method( + if (cc_full_descr->iterator_methods.finalize) { + ret = bt_component_class_source_set_notification_iterator_finalize_method( comp_class, - cc_full_descr->iterator_methods.destroy); + cc_full_descr->iterator_methods.finalize); if (ret) { status = BT_PLUGIN_STATUS_ERROR; BT_PUT(comp_class); @@ -537,17 +570,6 @@ enum bt_plugin_status bt_plugin_so_init( } break; case BT_COMPONENT_CLASS_TYPE_FILTER: - if (cc_full_descr->filter_add_iterator_method) { - ret = bt_component_class_filter_set_add_iterator_method( - comp_class, - cc_full_descr->filter_add_iterator_method); - if (ret) { - status = BT_PLUGIN_STATUS_ERROR; - BT_PUT(comp_class); - goto end; - } - } - if (cc_full_descr->iterator_methods.init) { ret = bt_component_class_filter_set_notification_iterator_init_method( comp_class, @@ -559,10 +581,10 @@ enum bt_plugin_status bt_plugin_so_init( } } - if (cc_full_descr->iterator_methods.destroy) { - ret = bt_component_class_filter_set_notification_iterator_destroy_method( + if (cc_full_descr->iterator_methods.finalize) { + ret = bt_component_class_filter_set_notification_iterator_finalize_method( comp_class, - cc_full_descr->iterator_methods.destroy); + cc_full_descr->iterator_methods.finalize); if (ret) { status = BT_PLUGIN_STATUS_ERROR; BT_PUT(comp_class); @@ -582,16 +604,6 @@ enum bt_plugin_status bt_plugin_so_init( } break; case BT_COMPONENT_CLASS_TYPE_SINK: - if (cc_full_descr->sink_add_iterator_method) { - ret = bt_component_class_sink_set_add_iterator_method( - comp_class, - cc_full_descr->sink_add_iterator_method); - if (ret) { - status = BT_PLUGIN_STATUS_ERROR; - BT_PUT(comp_class); - goto end; - } - } break; default: assert(false); @@ -643,6 +655,7 @@ struct bt_plugin *bt_plugin_so_create_empty( goto error; } + plugin->destroy_spec_data = bt_plugin_so_destroy_spec_data; plugin->spec_data = g_new0(struct bt_plugin_so_spec_data, 1); if (!plugin->spec_data) { goto error;