projects
/
babeltrace.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: lib: fix memory leak in simple_sink_init error path
[babeltrace.git]
/
src
/
lib
/
graph
/
component-class-sink-simple.c
diff --git
a/src/lib/graph/component-class-sink-simple.c
b/src/lib/graph/component-class-sink-simple.c
index 9244adb7595f944d62b5235d47d23b88f44f3efc..812e3b5fe4ed86e32a6b61506669535f9fe4a7e7 100644
(file)
--- a/
src/lib/graph/component-class-sink-simple.c
+++ b/
src/lib/graph/component-class-sink-simple.c
@@
-33,6
+33,15
@@
struct simple_sink_data {
struct simple_sink_init_method_data init_method_data;
};
struct simple_sink_init_method_data init_method_data;
};
+static
+void simple_sink_data_destroy(struct simple_sink_data *data)
+{
+ if (data) {
+ BT_OBJECT_PUT_REF_AND_RESET(data->msg_iter);
+ g_free(data);
+ }
+}
+
static
enum bt_component_class_initialize_method_status simple_sink_init(
bt_self_component_sink *self_comp,
static
enum bt_component_class_initialize_method_status simple_sink_init(
bt_self_component_sink *self_comp,
@@
-63,10
+72,13
@@
enum bt_component_class_initialize_method_status simple_sink_init(
goto end;
}
goto end;
}
+ /* Transfer ownership to component */
bt_self_component_set_data(
bt_self_component_sink_as_self_component(self_comp), data);
bt_self_component_set_data(
bt_self_component_sink_as_self_component(self_comp), data);
+ data = NULL;
end:
end:
+ simple_sink_data_destroy(data);
return status;
}
return status;
}
@@
-76,16
+88,15
@@
void simple_sink_finalize(struct bt_self_component_sink *self_comp)
struct simple_sink_data *data = bt_self_component_get_data(
bt_self_component_sink_as_self_component(self_comp));
struct simple_sink_data *data = bt_self_component_get_data(
bt_self_component_sink_as_self_component(self_comp));
- if (data) {
- if (data->init_method_data.finalize_func) {
- /* Call user's finalization function */
- data->init_method_data.finalize_func(
- data->init_method_data.user_data);
- }
+ BT_ASSERT(data);
- BT_OBJECT_PUT_REF_AND_RESET(data->msg_iter);
- g_free(data);
+ if (data->init_method_data.finalize_func) {
+ /* Call user's finalization function */
+ data->init_method_data.finalize_func(
+ data->init_method_data.user_data);
}
}
+
+ simple_sink_data_destroy(data);
}
static
}
static
This page took
0.023972 seconds
and
4
git commands to generate.