From: Jérémie Galarneau Date: Thu, 25 Feb 2016 17:25:39 +0000 (-0500) Subject: Leak fix X-Git-Tag: v2.0.0-pre1~822 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=0cc9e945b74225cd449d20f0c9516fb152d220b1 Leak fix Signed-off-by: Jérémie Galarneau --- diff --git a/converter/babeltrace.c b/converter/babeltrace.c index 78085775..fd025b6c 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -177,6 +177,9 @@ void print_detected_component_classes(struct bt_component_factory *factory) plugin_description ? plugin_description : "None"); printf_verbose("\tcomponent description: %s\n", component_description ? component_description : "None"); + + bt_put(plugin); + bt_put(component_class); } } diff --git a/lib/plugin-system/component-factory.c b/lib/plugin-system/component-factory.c index 6601a0a6..d97eedf6 100644 --- a/lib/plugin-system/component-factory.c +++ b/lib/plugin-system/component-factory.c @@ -122,10 +122,10 @@ bt_component_factory_load_file(struct bt_component_factory *factory, goto end; } - factory->current_plugin = plugin; - component_status = bt_plugin_register_component_classes(plugin, - factory); - factory->current_plugin = NULL; + BT_MOVE(factory->current_plugin, plugin); + component_status = bt_plugin_register_component_classes( + factory->current_plugin, factory); + BT_PUT(factory->current_plugin); if (component_status != BT_COMPONENT_STATUS_OK) { switch (component_status) { case BT_COMPONENT_STATUS_NOMEM: @@ -136,7 +136,6 @@ bt_component_factory_load_file(struct bt_component_factory *factory, break; } - BT_PUT(plugin); goto end; } end: @@ -318,6 +317,7 @@ struct bt_component_class *bt_component_factory_get_component_class( if (type != BT_COMPONENT_TYPE_UNKNOWN) { if (type != bt_component_class_get_type( component_class)) { + bt_put(plugin); continue; } } @@ -328,6 +328,7 @@ struct bt_component_class *bt_component_factory_get_component_class( assert(cur_plugin_name); if (strcmp(plugin_name, cur_plugin_name)) { + bt_put(plugin); continue; } } @@ -338,10 +339,12 @@ struct bt_component_class *bt_component_factory_get_component_class( assert(cur_cc_name); if (strcmp(component_name, cur_cc_name)) { + bt_put(plugin); continue; } } + bt_put(plugin); /* All criteria met. */ goto match; } diff --git a/lib/plugin-system/component.c b/lib/plugin-system/component.c index 9c4121ba..16bc2868 100644 --- a/lib/plugin-system/component.c +++ b/lib/plugin-system/component.c @@ -124,7 +124,6 @@ struct bt_component *bt_component_create( } bt_object_init(component, bt_component_destroy); - component->class = bt_get(component_class); component->name = g_string_new(name); if (!component->name) { BT_PUT(component);