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 bf55a69cde984bdaed95add69e5d4d445b594a64..812e3b5fe4ed86e32a6b61506669535f9fe4a7e7 100644
(file)
--- a/
src/lib/graph/component-class-sink-simple.c
+++ b/
src/lib/graph/component-class-sink-simple.c
@@
-9,7
+9,7
@@
#include "common/assert.h"
#include "common/common.h"
#include "common/assert.h"
#include "common/common.h"
-#include "lib/assert-
pre
.h"
+#include "lib/assert-
cond
.h"
#include "lib/object.h"
#include <babeltrace2/graph/component-class.h>
#include <babeltrace2/graph/self-component-port.h>
#include "lib/object.h"
#include <babeltrace2/graph/component-class.h>
#include <babeltrace2/graph/self-component-port.h>
@@
-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
@@
-171,12
+182,11
@@
enum bt_component_class_sink_consume_method_status simple_sink_consume(
return status;
}
return status;
}
+BT_HIDDEN
struct bt_component_class_sink *bt_component_class_sink_simple_borrow(void)
{
enum bt_component_class_set_method_status set_method_status;
struct bt_component_class_sink *bt_component_class_sink_simple_borrow(void)
{
enum bt_component_class_set_method_status set_method_status;
- BT_ASSERT_PRE_NO_ERROR();
-
if (simple_comp_cls) {
goto end;
}
if (simple_comp_cls) {
goto end;
}
This page took
0.025586 seconds
and
4
git commands to generate.