lib: graph API: return borrowed references when adding to an object
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Sun, 12 Jan 2020 15:45:31 +0000 (10:45 -0500)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Mon, 13 Jan 2020 15:26:55 +0000 (10:26 -0500)
Before this patch, the following functions return a new reference when
their last parameter is not `NULL`:

* bt_graph_add_filter_component()
* bt_graph_add_filter_component_with_initialize_method_data()
* bt_graph_add_simple_sink_component()
* bt_graph_add_sink_component()
* bt_graph_add_sink_component_with_initialize_method_data()
* bt_graph_add_source_component()
* bt_graph_add_source_component_with_initialize_method_data()
* bt_graph_connect_ports()
* bt_self_component_filter_add_input_port()
* bt_self_component_filter_add_output_port()
* bt_self_component_sink_add_input_port()
* bt_self_component_source_add_output_port()

I'm changing this so that they return a borrowed reference instead. This
is more in line with other non-creating functions which always return
borrowed references.

It's okay to borrow here because the object to which you add an object
becomes its owner anyway.

Most sites are updated by removing the *_put_ref() call as the reference
is now borrowed.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I71a5e18760504d8f8610162e3f6d7bd8d87474f9
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2762
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
src/bindings/python/bt2/bt2/component.py
src/bindings/python/bt2/bt2/graph.py
src/cli/babeltrace2.c
src/lib/graph/component-filter.c
src/lib/graph/component-sink.c
src/lib/graph/component-source.c
src/lib/graph/graph.c
tests/lib/plugin.c
tests/lib/test_graph_topo.c
tests/lib/test_remove_destruction_listener_in_destruction_listener.c
tests/lib/test_simple_sink.c

index afc1047d0c8ee4781672b7ba2cae9fae064a38c6..f4aa8e8003104b5448937d7ddcfcc88b064be260 100644 (file)
@@ -845,7 +845,9 @@ class _UserSourceComponent(_UserComponent, _SourceComponentConst):
             comp_status, 'cannot add output port to source component object'
         )
         assert self_port_ptr is not None
-        return bt2_port._UserComponentOutputPort._create_from_ptr(self_port_ptr)
+        return bt2_port._UserComponentOutputPort._create_from_ptr_and_get_ref(
+            self_port_ptr
+        )
 
 
 class _UserFilterComponent(_UserComponent, _FilterComponentConst):
@@ -893,7 +895,9 @@ class _UserFilterComponent(_UserComponent, _FilterComponentConst):
             comp_status, 'cannot add output port to filter component object'
         )
         assert self_port_ptr
-        return bt2_port._UserComponentOutputPort._create_from_ptr(self_port_ptr)
+        return bt2_port._UserComponentOutputPort._create_from_ptr_and_get_ref(
+            self_port_ptr
+        )
 
     def _add_input_port(self, name, user_data=None):
         utils._check_str(name)
@@ -903,7 +907,9 @@ class _UserFilterComponent(_UserComponent, _FilterComponentConst):
             comp_status, 'cannot add input port to filter component object'
         )
         assert self_port_ptr
-        return bt2_port._UserComponentInputPort._create_from_ptr(self_port_ptr)
+        return bt2_port._UserComponentInputPort._create_from_ptr_and_get_ref(
+            self_port_ptr
+        )
 
 
 class _UserSinkComponent(_UserComponent, _SinkComponentConst):
@@ -943,7 +949,9 @@ class _UserSinkComponent(_UserComponent, _SinkComponentConst):
             comp_status, 'cannot add input port to sink component object'
         )
         assert self_port_ptr
-        return bt2_port._UserComponentInputPort._create_from_ptr(self_port_ptr)
+        return bt2_port._UserComponentInputPort._create_from_ptr_and_get_ref(
+            self_port_ptr
+        )
 
     def _create_message_iterator(self, input_port):
         utils._check_type(input_port, bt2_port._UserComponentInputPort)
index 9d5ba3aad42810979f7053f356d6ff3506ed6c65..9611c6e287b9f7f69c8a1560317c5d75a56848f0 100644 (file)
@@ -119,7 +119,9 @@ class Graph(object._SharedObject):
         )
         utils._handle_func_status(status, 'cannot add component to graph')
         assert comp_ptr
-        return bt2_component._create_component_from_const_ptr(comp_ptr, cc_type)
+        return bt2_component._create_component_from_const_ptr_and_get_ref(
+            comp_ptr, cc_type
+        )
 
     def connect_ports(self, upstream_port, downstream_port):
         utils._check_type(upstream_port, bt2_port._OutputPortConst)
@@ -129,7 +131,7 @@ class Graph(object._SharedObject):
         )
         utils._handle_func_status(status, 'cannot connect component ports within graph')
         assert conn_ptr
-        return bt2_connection._ConnectionConst._create_from_ptr(conn_ptr)
+        return bt2_connection._ConnectionConst._create_from_ptr_and_get_ref(conn_ptr)
 
     def add_port_added_listener(self, listener):
         if not callable(listener):
index 0dfac7a8ec077d8ca42c6da1a45f1a20c1fd0275..d065075ee6e384d8bf9fda3d9100c7cebfe0af63 100644 (file)
@@ -1442,6 +1442,7 @@ int cmd_run_ctx_connect_upstream_port_to_downstream_component(
                                ctx->graph, trimmer_class, trimmer_name,
                                trimmer_params, ctx->cfg->log_level,
                                &trimmer);
+                       bt_component_filter_get_ref(trimmer);
                        free(trimmer_name);
                        if (add_comp_status !=
                                        BT_GRAPH_ADD_COMPONENT_STATUS_OK) {
@@ -2270,18 +2271,21 @@ int cmd_run_ctx_create_components_from_config_components(
                                comp_cls, cfg_comp->instance_name->str,
                                cfg_comp->params, cfg_comp->log_level,
                                (void *) &comp);
+                       bt_component_source_get_ref(comp);
                        break;
                case BT_COMPONENT_CLASS_TYPE_FILTER:
                        ret = bt_graph_add_filter_component(ctx->graph,
                                comp_cls, cfg_comp->instance_name->str,
                                cfg_comp->params, cfg_comp->log_level,
                                (void *) &comp);
+                       bt_component_filter_get_ref(comp);
                        break;
                case BT_COMPONENT_CLASS_TYPE_SINK:
                        ret = bt_graph_add_sink_component(ctx->graph,
                                comp_cls, cfg_comp->instance_name->str,
                                cfg_comp->params, cfg_comp->log_level,
                                (void *) &comp);
+                       bt_component_sink_get_ref(comp);
                        break;
                default:
                        bt_common_abort();
index 9950a50295d43d9c79450ae3226664407891873d..e805f8dadf95c29290057cd00f34fabb7d1a525c 100644 (file)
@@ -135,7 +135,6 @@ enum bt_self_component_add_port_status bt_self_component_filter_add_output_port(
        if (self_port) {
                /* Move reference to user */
                *self_port = (void *) port;
-               port = NULL;
        }
 
 end:
@@ -205,7 +204,6 @@ enum bt_self_component_add_port_status bt_self_component_filter_add_input_port(
        if (self_port) {
                /* Move reference to user */
                *self_port = (void *) port;
-               port = NULL;
        }
 
 end:
index 577239acf963582158570e1ee11791f82f1aef28..12ea8c2780103821d26c9a0cc10ec5e040ab470b 100644 (file)
@@ -139,7 +139,6 @@ enum bt_self_component_add_port_status bt_self_component_sink_add_input_port(
        if (self_port) {
                /* Move reference to user */
                *self_port = (void *) port;
-               port = NULL;
        }
 
 end:
index d793c1920799997f7a4de8310d7639e30624c13d..0e3eedc2246c791a4985d1743912ba9db8913fe0 100644 (file)
@@ -133,7 +133,6 @@ enum bt_self_component_add_port_status bt_self_component_source_add_output_port(
        if (self_port) {
                /* Move reference to user */
                *self_port = (void *) port;
-               port = NULL;
        }
 
 end:
index 10080b953a22ef35979741fc832a130096109658..9e7e8ffce188b0b156a067c40d0febb8d4365f0f 100644 (file)
@@ -433,7 +433,6 @@ enum bt_graph_connect_ports_status bt_graph_connect_ports(
        if (user_connection) {
                /* Move reference to user */
                *user_connection = connection;
-               connection = NULL;
        }
 
 end:
@@ -1020,7 +1019,6 @@ int add_component_with_init_method_data(
        if (user_component) {
                /* Move reference to user */
                *user_component = component;
-               component = NULL;
        }
 
 end:
index 6ef8d5db44c8871693bc107dbf9967b27e6d9bc0..e7bff6dda6b19ed8f21944674d8ab1c8b0f58081 100644 (file)
@@ -204,7 +204,6 @@ static void test_sfs(const char *plugin_dir)
                "the-sink", NULL, BT_LOGGING_LEVEL_NONE, &sink_component);
        ok(graph_ret == BT_GRAPH_ADD_COMPONENT_STATUS_OK && sink_component,
                "bt_graph_add_sink_component() still works after the plugin object is destroyed");
-       BT_COMPONENT_SINK_PUT_REF_AND_RESET(sink_component);
        bt_graph_put_ref(graph);
 
        free(sfs_path);
index d3d45818d224531517935b4318aa328549c6e9da..d6c4c07411c2f439572cea0319fc56ac0b13a6fa 100644 (file)
@@ -505,8 +505,6 @@ void test_src_adds_port_in_port_connected(void)
        ok(src_port_connected_pos < graph_port_added_src_pos,
                "event order is good");
 
-       bt_component_source_put_ref(src);
-       bt_component_sink_put_ref(sink);
        bt_graph_put_ref(graph);
 }
 
@@ -573,9 +571,7 @@ void test_simple(void)
        event.data.sink_comp_input_port_connected.other_port = gsrc_def_port;
        ok(has_event(&event), "got the expected sink's port connected event");
 
-       bt_component_sink_put_ref(sink);
        bt_graph_put_ref(graph);
-       bt_component_source_put_ref(src);
 }
 
 static
@@ -639,9 +635,6 @@ void test_src_port_connected_error(void)
        ok(has_event(&event), "got the expected source's port connected event");
 
        bt_graph_put_ref(graph);
-       bt_component_sink_put_ref(sink);
-       bt_component_source_put_ref(src);
-       bt_connection_put_ref(conn);
 }
 
 static
@@ -711,10 +704,7 @@ void test_sink_port_connected_error(void)
        event.data.sink_comp_input_port_connected.other_port = gsrc_def_port;
        ok(has_event(&event), "got the expected sink's port connected event");
 
-       bt_connection_put_ref(conn);
        bt_graph_put_ref(graph);
-       bt_component_sink_put_ref(sink);
-       bt_component_source_put_ref(src);
 }
 
 static
index 2cc1b76c5de277d0f3799c84dd552e696da46bc0..3e3d0037152a48b69408e0ff5654c285dfe748d7 100644 (file)
@@ -278,7 +278,6 @@ int main(int argc, char **argv)
                BT_LOGGING_LEVEL_WARNING, &source);
        BT_ASSERT(add_component_status == BT_GRAPH_ADD_COMPONENT_STATUS_OK);
 
-       bt_component_source_put_ref(source);
        bt_component_class_source_put_ref(source_cc);
        bt_message_iterator_class_put_ref(msg_iter_cls);
        bt_graph_put_ref(graph);
index b12ab35a6a41aa9caaac0b913f248d1d36b39346..7c09cf674ea629c78be1b1cf1b3965748f7d56df 100644 (file)
@@ -109,7 +109,6 @@ bt_graph *create_graph_with_source(const bt_port_output **out_port)
        *out_port = bt_component_source_borrow_output_port_by_index_const(
                src_comp, 0);
        BT_ASSERT(*out_port);
-       bt_component_source_put_ref(src_comp);
        bt_component_class_source_put_ref(src_comp_cls);
        bt_message_iterator_class_put_ref(msg_iter_cls);
        return graph;
@@ -163,7 +162,6 @@ void test_simple_expect_run_once_status(
        ok((run_once_status < 0) == (err != NULL),
                "Current thread error is set if bt_graph_run_once returned an error");
 
-       bt_component_sink_put_ref(sink_comp);
        bt_graph_put_ref(graph);
        if (err) {
                bt_error_release(err);
This page took 0.031126 seconds and 4 git commands to generate.