X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fplugin%2Fplugin-so.c;h=771937ed8782a57d4c07a9dddd5103c176da4c38;hb=3230ee6b4f3a704958b761daecae835c56938bc9;hp=2e528ea063d7943f6416c97ae7e66a21130df452;hpb=3d9990ac8bcbb870300869ed217b80151b52bf4e;p=babeltrace.git diff --git a/lib/plugin/plugin-so.c b/lib/plugin/plugin-so.c index 2e528ea0..771937ed 100644 --- a/lib/plugin/plugin-so.c +++ b/lib/plugin/plugin-so.c @@ -254,6 +254,7 @@ enum bt_plugin_status bt_plugin_so_init( 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_connected_method port_connected_method; bt_component_class_port_disconnected_method port_disconnected_method; struct bt_component_class_iterator_methods iterator_methods; }; @@ -387,6 +388,10 @@ enum bt_plugin_status bt_plugin_so_init( 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_PORT_CONNECTED_METHOD: + cc_full_descr->port_connected_method = + cur_cc_descr_attr->value.port_connected_method; + break; 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; @@ -524,6 +529,16 @@ enum bt_plugin_status bt_plugin_so_init( } } + if (cc_full_descr->port_connected_method) { + ret = bt_component_class_set_port_connected_method( + comp_class, cc_full_descr->port_connected_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); @@ -928,10 +943,9 @@ void plugin_comp_class_destroy_listener(struct bt_component_class *comp_class, } BT_HIDDEN -int bt_plugin_so_on_add_component_class(struct bt_plugin *plugin, +void bt_plugin_so_on_add_component_class(struct bt_plugin *plugin, struct bt_component_class *comp_class) { - int ret; struct bt_plugin_so_spec_data *spec = plugin->spec_data; assert(plugin->spec_data); @@ -942,18 +956,6 @@ int bt_plugin_so_on_add_component_class(struct bt_plugin *plugin, bt_get(spec->shared_lib_handle)); /* Add our custom destroy listener */ - ret = bt_component_class_add_destroy_listener(comp_class, + bt_component_class_add_destroy_listener(comp_class, plugin_comp_class_destroy_listener, NULL); - if (ret) { - goto error; - } - goto end; - -error: - /* Remove entry from global hash table (if exists) */ - g_hash_table_remove(comp_classes_to_shlib_handles, - comp_class); - -end: - return ret; }