lib, bt2: graph API: remove "ports connected" listeners
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Wed, 11 Dec 2019 20:48:32 +0000 (15:48 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 20 Jan 2020 20:15:24 +0000 (15:15 -0500)
Two ports being connected is always the consequence of the graph user
calling bt_graph_connect_ports() and this function returning
`BT_GRAPH_CONNECT_PORTS_STATUS_OK`. In other words, this event cannot
occur without a direct, concomitant action by the graph user.

Knowing this, the "ports connected" graph listeners are useless.

The "port added" listeners remain useful: a component can add a port at
many moments during the graph configuration phase, therefore having a
"port added" listener can avoid checking if the current graph components
have new ports every time you call bt_graph_add_*_component*() or
bt_graph_connect_ports().

This patch removes everything related to the "ports connected" graph
listeners.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I218c7b7b57c52f2e8589b35e3d89f38dfd961c0a
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2636
Tested-by: jenkins <jenkins@lttng.org>
include/babeltrace2/graph/graph.h
src/bindings/python/bt2/bt2/graph.py
src/bindings/python/bt2/bt2/native_bt_graph.i
src/bindings/python/bt2/bt2/native_bt_graph.i.h
src/lib/graph/graph.c
src/lib/graph/graph.h
tests/bindings/python/bt2/test_graph.py
tests/lib/test_graph_topo.c

index e4d53e6e661816e12d7ce5fb2410ee49a6e1183c..f66b953887a87400875d37d8194cfdd0bb077cea 100644 (file)
@@ -238,34 +238,6 @@ bt_graph_add_filter_component_output_port_added_listener(
                bt_graph_listener_removed_func listener_removed, void *data,
                bt_listener_id *listener_id);
 
-extern bt_graph_add_listener_status
-bt_graph_add_source_filter_component_ports_connected_listener(
-               bt_graph *graph,
-               bt_graph_source_filter_component_ports_connected_listener_func listener,
-               bt_graph_listener_removed_func listener_removed, void *data,
-               bt_listener_id *listener_id);
-
-extern bt_graph_add_listener_status
-bt_graph_add_filter_filter_component_ports_connected_listener(
-               bt_graph *graph,
-               bt_graph_filter_filter_component_ports_connected_listener_func listener,
-               bt_graph_listener_removed_func listener_removed, void *data,
-               bt_listener_id *listener_id);
-
-extern bt_graph_add_listener_status
-bt_graph_add_source_sink_component_ports_connected_listener(
-               bt_graph *graph,
-               bt_graph_source_sink_component_ports_connected_listener_func listener,
-               bt_graph_listener_removed_func listener_removed, void *data,
-               bt_listener_id *listener_id);
-
-extern bt_graph_add_listener_status
-bt_graph_add_filter_sink_component_ports_connected_listener(
-               bt_graph *graph,
-               bt_graph_filter_sink_component_ports_connected_listener_func listener,
-               bt_graph_listener_removed_func listener_removed, void *data,
-               bt_listener_id *listener_id);
-
 typedef enum bt_graph_add_interrupter_status {
        BT_GRAPH_ADD_INTERRUPTER_STATUS_OK              = __BT_FUNC_STATUS_OK,
        BT_GRAPH_ADD_INTERRUPTER_STATUS_MEMORY_ERROR    = __BT_FUNC_STATUS_MEMORY_ERROR,
index 79be1ca80905a94c8aab0de01044c96b41bf287f..b1d59700c8cc100c50d3c28809d82edf7495cf04 100644 (file)
@@ -40,32 +40,6 @@ def _graph_port_added_listener_from_native(
     user_listener(component, port)
 
 
-def _graph_ports_connected_listener_from_native(
-    user_listener,
-    upstream_component_ptr,
-    upstream_component_type,
-    upstream_port_ptr,
-    downstream_component_ptr,
-    downstream_component_type,
-    downstream_port_ptr,
-):
-    upstream_component = bt2_component._create_component_from_const_ptr_and_get_ref(
-        upstream_component_ptr, upstream_component_type
-    )
-    upstream_port = bt2_port._create_from_const_ptr_and_get_ref(
-        upstream_port_ptr, native_bt.PORT_TYPE_OUTPUT
-    )
-    downstream_component = bt2_component._create_component_from_const_ptr_and_get_ref(
-        downstream_component_ptr, downstream_component_type
-    )
-    downstream_port = bt2_port._create_from_const_ptr_and_get_ref(
-        downstream_port_ptr, native_bt.PORT_TYPE_INPUT
-    )
-    user_listener(
-        upstream_component, upstream_port, downstream_component, downstream_port
-    )
-
-
 class Graph(object._SharedObject):
     _get_ref = staticmethod(native_bt.graph_get_ref)
     _put_ref = staticmethod(native_bt.graph_put_ref)
@@ -166,19 +140,6 @@ class Graph(object._SharedObject):
         if listener_ids is None:
             raise bt2._Error('cannot add listener to graph object')
 
-    def add_ports_connected_listener(self, listener):
-        if not callable(listener):
-            raise TypeError("'listener' parameter is not callable")
-
-        fn = native_bt.bt2_graph_add_ports_connected_listener
-        listener_from_native = functools.partial(
-            _graph_ports_connected_listener_from_native, listener
-        )
-
-        listener_ids = fn(self._ptr, listener_from_native)
-        if listener_ids is None:
-            raise bt2._Error('cannot add listener to graph object')
-
     def run_once(self):
         status = native_bt.graph_run_once(self._ptr)
         utils._handle_func_status(status, 'graph object could not run once')
index a2e623e5747aa5fa92cf8fbef3fefb956f67b7c1..4a7b9f6dbce269b9f405541f9fa69f486d273af7 100644 (file)
 PyObject *bt_bt2_graph_add_port_added_listener(struct bt_graph *graph,
                PyObject *py_callable);
 
-PyObject *bt_bt2_graph_add_ports_connected_listener(struct bt_graph *graph,
-               PyObject *py_callable);
-
 bt_graph_add_component_status
 bt_bt2_graph_add_source_component(
                bt_graph *graph,
index e310e53bf245f9c6b5fd106b310c351125a8575d..e45fea610df5a886b186c67bb90ab799eedd7704 100644 (file)
@@ -247,271 +247,6 @@ end:
        return py_listener_ids;
 }
 
-static
-bt_graph_listener_func_status ports_connected_listener(
-               const void *upstream_component,
-               swig_type_info *upstream_component_swig_type,
-               bt_component_class_type upstream_component_class_type,
-               const bt_port_output *upstream_port,
-               const void *downstream_component,
-               swig_type_info *downstream_component_swig_type,
-               bt_component_class_type downstream_component_class_type,
-               const bt_port_input *downstream_port,
-               void *py_callable)
-{
-       PyObject *py_upstream_component_ptr = NULL;
-       PyObject *py_upstream_port_ptr = NULL;
-       PyObject *py_downstream_component_ptr = NULL;
-       PyObject *py_downstream_port_ptr = NULL;
-       PyObject *py_res = NULL;
-       bt_graph_listener_func_status status;
-
-       py_upstream_component_ptr = SWIG_NewPointerObj(SWIG_as_voidptr(upstream_component),
-               upstream_component_swig_type, 0);
-       if (!py_upstream_component_ptr) {
-               BT_LOGF_STR("Failed to create upstream component SWIG pointer object.");
-               status = __BT_FUNC_STATUS_MEMORY_ERROR;
-               goto end;
-       }
-
-       py_upstream_port_ptr = SWIG_NewPointerObj(
-               SWIG_as_voidptr(upstream_port), SWIGTYPE_p_bt_port_output, 0);
-       if (!py_upstream_port_ptr) {
-               BT_LOGF_STR("Failed to create upstream port SWIG pointer object.");
-               status = __BT_FUNC_STATUS_MEMORY_ERROR;
-               goto end;
-       }
-
-       py_downstream_component_ptr = SWIG_NewPointerObj(SWIG_as_voidptr(downstream_component),
-               downstream_component_swig_type, 0);
-       if (!py_downstream_component_ptr) {
-               BT_LOGF_STR("Failed to create downstream component SWIG pointer object.");
-               status = __BT_FUNC_STATUS_MEMORY_ERROR;
-               goto end;
-       }
-
-       py_downstream_port_ptr = SWIG_NewPointerObj(
-               SWIG_as_voidptr(downstream_port), SWIGTYPE_p_bt_port_input, 0);
-       if (!py_downstream_port_ptr) {
-               BT_LOGF_STR("Failed to create downstream port SWIG pointer object.");
-               status = __BT_FUNC_STATUS_MEMORY_ERROR;
-               goto end;
-       }
-
-       py_res = PyObject_CallFunction(py_callable, "(OiOOiO)",
-               py_upstream_component_ptr, upstream_component_class_type,
-               py_upstream_port_ptr,
-               py_downstream_component_ptr, downstream_component_class_type,
-               py_downstream_port_ptr);
-       if (!py_res) {
-               loge_exception_append_cause_clear(
-                       "Graph's port connected listener (Python)",
-                       BT_LOG_OUTPUT_LEVEL);
-               status = __BT_FUNC_STATUS_ERROR;
-               goto end;
-       }
-
-       BT_ASSERT(py_res == Py_None);
-       status = __BT_FUNC_STATUS_OK;
-
-end:
-       Py_XDECREF(py_upstream_component_ptr);
-       Py_XDECREF(py_upstream_port_ptr);
-       Py_XDECREF(py_downstream_component_ptr);
-       Py_XDECREF(py_downstream_port_ptr);
-       Py_XDECREF(py_res);
-       return status;
-}
-
-static
-bt_graph_listener_func_status source_filter_component_ports_connected_listener(
-       const bt_component_source *source_component,
-       const bt_component_filter *filter_component,
-       const bt_port_output *upstream_port,
-       const bt_port_input *downstream_port, void *py_callable)
-{
-       return ports_connected_listener(
-               source_component, SWIGTYPE_p_bt_component_source, BT_COMPONENT_CLASS_TYPE_SOURCE,
-               upstream_port,
-               filter_component, SWIGTYPE_p_bt_component_filter, BT_COMPONENT_CLASS_TYPE_FILTER,
-               downstream_port,
-               py_callable);
-}
-
-static
-bt_graph_listener_func_status source_sink_component_ports_connected_listener(
-       const bt_component_source *source_component,
-       const bt_component_sink *sink_component,
-       const bt_port_output *upstream_port,
-       const bt_port_input *downstream_port, void *py_callable)
-{
-       return ports_connected_listener(
-               source_component, SWIGTYPE_p_bt_component_source, BT_COMPONENT_CLASS_TYPE_SOURCE,
-               upstream_port,
-               sink_component, SWIGTYPE_p_bt_component_sink, BT_COMPONENT_CLASS_TYPE_SINK,
-               downstream_port,
-               py_callable);
-}
-
-static
-bt_graph_listener_func_status filter_filter_component_ports_connected_listener(
-       const bt_component_filter *filter_component_left,
-       const bt_component_filter *filter_component_right,
-       const bt_port_output *upstream_port,
-       const bt_port_input *downstream_port, void *py_callable)
-{
-       return ports_connected_listener(
-               filter_component_left, SWIGTYPE_p_bt_component_filter, BT_COMPONENT_CLASS_TYPE_FILTER,
-               upstream_port,
-               filter_component_right, SWIGTYPE_p_bt_component_filter, BT_COMPONENT_CLASS_TYPE_FILTER,
-               downstream_port,
-               py_callable);
-}
-
-static
-bt_graph_listener_func_status filter_sink_component_ports_connected_listener(
-       const bt_component_filter *filter_component,
-       const bt_component_sink *sink_component,
-       const bt_port_output *upstream_port,
-       const bt_port_input *downstream_port, void *py_callable)
-{
-       return ports_connected_listener(
-               filter_component, SWIGTYPE_p_bt_component_filter, BT_COMPONENT_CLASS_TYPE_FILTER,
-               upstream_port,
-               sink_component, SWIGTYPE_p_bt_component_sink, BT_COMPONENT_CLASS_TYPE_SINK,
-               downstream_port,
-               py_callable);
-}
-
-static
-PyObject *bt_bt2_graph_add_ports_connected_listener(struct bt_graph *graph,
-               PyObject *py_callable)
-{
-       PyObject *py_listener_ids = NULL;
-       PyObject *py_listener_id = NULL;
-       bt_listener_id listener_id;
-       bt_graph_add_listener_status status;
-       const char * const module_name =
-               "graph_add_ports_connected_listener() (Python)";
-
-       BT_ASSERT(graph);
-       BT_ASSERT(py_callable);
-
-       /* Behind the scene, we will be registering 4 different listeners and
-        * return all of their ids. */
-       py_listener_ids = PyTuple_New(4);
-       if (!py_listener_ids) {
-               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
-                       "Failed to allocate one PyTuple.");
-               goto error;
-       }
-
-       /* source -> filter connection */
-       status = bt_graph_add_source_filter_component_ports_connected_listener(
-               graph, source_filter_component_ports_connected_listener,
-               graph_listener_removed, py_callable, &listener_id);
-       if (status != __BT_FUNC_STATUS_OK) {
-               /*
-                * bt_graph_add_source_filter_component_ports_connected_listener
-                * has already logged/appended an error cause.
-                */
-               goto error;
-       }
-
-       py_listener_id = PyLong_FromUnsignedLongLong(listener_id);
-       if (!py_listener_id) {
-               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
-                       "Failed to allocate one PyLong.");
-               goto error;
-       }
-
-       PyTuple_SET_ITEM(py_listener_ids, 0, py_listener_id);
-       py_listener_id = NULL;
-
-       /* source -> sink connection */
-       status = bt_graph_add_source_sink_component_ports_connected_listener(
-               graph, source_sink_component_ports_connected_listener,
-               graph_listener_removed, py_callable, &listener_id);
-       if (status != __BT_FUNC_STATUS_OK) {
-               /*
-                * bt_graph_add_source_sink_component_ports_connected_listener
-                * has already logged/appended an error cause.
-                */
-               goto error;
-       }
-
-       py_listener_id = PyLong_FromUnsignedLongLong(listener_id);
-       if (!py_listener_id) {
-               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
-                       "Failed to allocate one PyLong.");
-               goto error;
-       }
-
-       PyTuple_SET_ITEM(py_listener_ids, 1, py_listener_id);
-       py_listener_id = NULL;
-
-       /* filter -> filter connection */
-       status = bt_graph_add_filter_filter_component_ports_connected_listener(
-               graph, filter_filter_component_ports_connected_listener,
-               graph_listener_removed, py_callable, &listener_id);
-       if (status != __BT_FUNC_STATUS_OK) {
-               /*
-                * bt_graph_add_filter_filter_component_ports_connected_listener
-                * has already logged/appended an error cause.
-                */
-               goto error;
-       }
-
-       py_listener_id = PyLong_FromUnsignedLongLong(listener_id);
-       if (!py_listener_id) {
-               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
-                       "Failed to allocate one PyLong.");
-               goto error;
-       }
-
-       PyTuple_SET_ITEM(py_listener_ids, 2, py_listener_id);
-       py_listener_id = NULL;
-
-       /* filter -> sink connection */
-       status = bt_graph_add_filter_sink_component_ports_connected_listener(
-               graph, filter_sink_component_ports_connected_listener,
-               graph_listener_removed, py_callable, &listener_id);
-       if (status != __BT_FUNC_STATUS_OK) {
-               /*
-                * bt_graph_add_filter_sink_component_ports_connected_listener
-                * has already logged/appended an error cause.
-                */
-               goto error;
-       }
-
-       py_listener_id = PyLong_FromUnsignedLongLong(listener_id);
-       if (!py_listener_id) {
-               BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name,
-                       "Failed to allocate one PyLong.");
-               goto error;
-       }
-
-       PyTuple_SET_ITEM(py_listener_ids, 3, py_listener_id);
-       py_listener_id = NULL;
-
-       Py_INCREF(py_callable);
-       Py_INCREF(py_callable);
-       Py_INCREF(py_callable);
-       Py_INCREF(py_callable);
-
-       goto end;
-
-error:
-       Py_XDECREF(py_listener_ids);
-       py_listener_ids = Py_None;
-       Py_INCREF(py_listener_ids);
-
-end:
-
-       Py_XDECREF(py_listener_id);
-       return py_listener_ids;
-}
-
 static
 bt_graph_add_component_status
 bt_bt2_graph_add_source_component(
index 22c4f92f8ec33314cd7f74cec71a5adb0781e3b8..8416b1f6bbe1c6c06d788463d616fdbdd14e040b 100644 (file)
 typedef enum bt_graph_listener_func_status
 (*port_added_func_t)(const void *, const void *, void *);
 
-typedef enum bt_graph_listener_func_status
-(*ports_connected_func_t)(const void *, const void *, const void *,
-               const void *, void *);
-
 typedef enum bt_component_class_initialize_method_status
 (*comp_init_method_t)(const void *, void *, const void *, void *);
 
@@ -72,11 +68,6 @@ struct bt_graph_listener_port_added {
        port_added_func_t func;
 };
 
-struct bt_graph_listener_ports_connected {
-       struct bt_graph_listener base;
-       ports_connected_func_t func;
-};
-
 #define INIT_LISTENERS_ARRAY(_type, _listeners)                                \
        do {                                                            \
                _listeners = g_array_new(FALSE, TRUE, sizeof(_type));   \
@@ -147,14 +138,6 @@ void destroy_graph(struct bt_object *obj)
                graph->listeners.filter_input_port_added);
        CALL_REMOVE_LISTENERS(struct bt_graph_listener_port_added,
                graph->listeners.sink_input_port_added);
-       CALL_REMOVE_LISTENERS(struct bt_graph_listener_ports_connected,
-               graph->listeners.source_filter_ports_connected);
-       CALL_REMOVE_LISTENERS(struct bt_graph_listener_ports_connected,
-               graph->listeners.filter_filter_ports_connected);
-       CALL_REMOVE_LISTENERS(struct bt_graph_listener_ports_connected,
-               graph->listeners.source_sink_ports_connected);
-       CALL_REMOVE_LISTENERS(struct bt_graph_listener_ports_connected,
-               graph->listeners.filter_sink_ports_connected);
 
        if (graph->messages) {
                g_ptr_array_free(graph->messages, TRUE);
@@ -206,30 +189,6 @@ void destroy_graph(struct bt_object *obj)
                graph->listeners.sink_input_port_added = NULL;
        }
 
-       if (graph->listeners.source_filter_ports_connected) {
-               g_array_free(graph->listeners.source_filter_ports_connected,
-                       TRUE);
-               graph->listeners.source_filter_ports_connected = NULL;
-       }
-
-       if (graph->listeners.filter_filter_ports_connected) {
-               g_array_free(graph->listeners.filter_filter_ports_connected,
-                       TRUE);
-               graph->listeners.filter_filter_ports_connected = NULL;
-       }
-
-       if (graph->listeners.source_sink_ports_connected) {
-               g_array_free(graph->listeners.source_sink_ports_connected,
-                       TRUE);
-               graph->listeners.source_sink_ports_connected = NULL;
-       }
-
-       if (graph->listeners.filter_sink_ports_connected) {
-               g_array_free(graph->listeners.filter_sink_ports_connected,
-                       TRUE);
-               graph->listeners.filter_sink_ports_connected = NULL;
-       }
-
        bt_object_pool_finalize(&graph->event_msg_pool);
        bt_object_pool_finalize(&graph->packet_begin_msg_pool);
        bt_object_pool_finalize(&graph->packet_end_msg_pool);
@@ -329,34 +288,6 @@ struct bt_graph *bt_graph_create(uint64_t mip_version)
                goto error;
        }
 
-       INIT_LISTENERS_ARRAY(struct bt_graph_listener_ports_connected,
-               graph->listeners.source_filter_ports_connected);
-
-       if (!graph->listeners.source_filter_ports_connected) {
-               goto error;
-       }
-
-       INIT_LISTENERS_ARRAY(struct bt_graph_listener_ports_connected,
-               graph->listeners.source_sink_ports_connected);
-
-       if (!graph->listeners.source_sink_ports_connected) {
-               goto error;
-       }
-
-       INIT_LISTENERS_ARRAY(struct bt_graph_listener_ports_connected,
-               graph->listeners.filter_filter_ports_connected);
-
-       if (!graph->listeners.filter_filter_ports_connected) {
-               goto error;
-       }
-
-       INIT_LISTENERS_ARRAY(struct bt_graph_listener_ports_connected,
-               graph->listeners.filter_sink_ports_connected);
-
-       if (!graph->listeners.filter_sink_ports_connected) {
-               goto error;
-       }
-
        graph->interrupters = g_ptr_array_new_with_free_func(
                (GDestroyNotify) bt_object_put_ref_no_null_check);
        if (!graph->interrupters) {
@@ -424,7 +355,6 @@ enum bt_graph_connect_ports_status bt_graph_connect_ports(
                const struct bt_connection **user_connection)
 {
        enum bt_graph_connect_ports_status status = BT_FUNC_STATUS_OK;
-       enum bt_graph_listener_func_status listener_status;
        struct bt_connection *connection = NULL;
        struct bt_port *upstream_port = (void *) upstream_port_out;
        struct bt_port *downstream_port = (void *) downstream_port_in;
@@ -526,27 +456,6 @@ enum bt_graph_connect_ports_status bt_graph_connect_ports(
 
        connection->notified_downstream_port_connected = true;
 
-       /*
-        * Notify the graph's creator that both ports are connected.
-        */
-       BT_LOGD_STR("Notifying graph's user that new component ports are connected.");
-       listener_status = bt_graph_notify_ports_connected(graph, upstream_port, downstream_port);
-       if (listener_status != BT_FUNC_STATUS_OK) {
-               if (listener_status < 0) {
-                       BT_LIB_LOGW_APPEND_CAUSE(
-                               "Graph \"ports connected\" listener failed: "
-                               "status=%d, %![graph-]+g, %![up-comp-]+c, "
-                               "%![down-comp-]+c, %![up-port-]+p, %![down-port-]+p",
-                               listener_status, graph,
-                               upstream_component, downstream_component,
-                               upstream_port, downstream_port);
-               }
-
-               status = (int) listener_status;
-               goto end;
-       }
-
-       connection->notified_graph_ports_connected = true;
        BT_LIB_LOGI("Connected component ports within graph: "
                "%![graph-]+g, %![up-comp-]+c, %![down-comp-]+c, "
                "%![up-port-]+p, %![down-port-]+p",
@@ -941,154 +850,6 @@ bt_graph_add_sink_component_input_port_added_listener(
        return BT_FUNC_STATUS_OK;
 }
 
-enum bt_graph_add_listener_status
-bt_graph_add_source_filter_component_ports_connected_listener(
-               struct bt_graph *graph,
-               bt_graph_source_filter_component_ports_connected_listener_func func,
-               bt_graph_listener_removed_func listener_removed, void *data,
-               bt_listener_id *out_listener_id)
-{
-       struct bt_graph_listener_ports_connected listener = {
-               .base = {
-                       .removed = listener_removed,
-                       .data = data,
-               },
-               .func = (ports_connected_func_t) func,
-       };
-       bt_listener_id listener_id;
-
-       BT_ASSERT_PRE_NO_ERROR();
-       BT_ASSERT_PRE_NON_NULL(graph, "Graph");
-       BT_ASSERT_PRE_NON_NULL(func, "Listener");
-       BT_ASSERT_PRE_NON_NULL(func, "\"Listener removed\" listener");
-       BT_ASSERT_PRE(!graph->in_remove_listener,
-               "Graph currently executing a \"listener removed\" listener: "
-               "%!+g", graph);
-       g_array_append_val(graph->listeners.source_filter_ports_connected,
-               listener);
-       listener_id = graph->listeners.source_filter_ports_connected->len - 1;
-       BT_LIB_LOGD("Added \"source to filter component ports connected\" listener to graph: "
-               "%![graph-]+g, listener-addr=%p, id=%d", graph, listener,
-               listener_id);
-
-       if (listener_id) {
-               *out_listener_id = listener_id;
-       }
-
-       return BT_FUNC_STATUS_OK;
-}
-
-enum bt_graph_add_listener_status
-bt_graph_add_source_sink_component_ports_connected_listener(
-               struct bt_graph *graph,
-               bt_graph_source_sink_component_ports_connected_listener_func func,
-               bt_graph_listener_removed_func listener_removed, void *data,
-               bt_listener_id *out_listener_id)
-{
-       struct bt_graph_listener_ports_connected listener = {
-               .base = {
-                       .removed = listener_removed,
-                       .data = data,
-               },
-               .func = (ports_connected_func_t) func,
-       };
-       bt_listener_id listener_id;
-
-       BT_ASSERT_PRE_NO_ERROR();
-       BT_ASSERT_PRE_NON_NULL(graph, "Graph");
-       BT_ASSERT_PRE_NON_NULL(func, "Listener");
-       BT_ASSERT_PRE_NON_NULL(func, "\"Listener removed\" listener");
-       BT_ASSERT_PRE(!graph->in_remove_listener,
-               "Graph currently executing a \"listener removed\" listener: "
-               "%!+g", graph);
-       g_array_append_val(graph->listeners.source_sink_ports_connected,
-               listener);
-       listener_id = graph->listeners.source_sink_ports_connected->len - 1;
-       BT_LIB_LOGD("Added \"source to sink component ports connected\" listener to graph: "
-               "%![graph-]+g, listener-addr=%p, id=%d", graph, listener,
-               listener_id);
-
-       if (listener_id) {
-               *out_listener_id = listener_id;
-       }
-
-       return BT_FUNC_STATUS_OK;
-}
-
-enum bt_graph_add_listener_status
-bt_graph_add_filter_filter_component_ports_connected_listener(
-               struct bt_graph *graph,
-               bt_graph_filter_filter_component_ports_connected_listener_func func,
-               bt_graph_listener_removed_func listener_removed, void *data,
-               bt_listener_id *out_listener_id)
-{
-       struct bt_graph_listener_ports_connected listener = {
-               .base = {
-                       .removed = listener_removed,
-                       .data = data,
-               },
-               .func = (ports_connected_func_t) func,
-       };
-       bt_listener_id listener_id;
-
-       BT_ASSERT_PRE_NO_ERROR();
-       BT_ASSERT_PRE_NON_NULL(graph, "Graph");
-       BT_ASSERT_PRE_NON_NULL(func, "Listener");
-       BT_ASSERT_PRE_NON_NULL(func, "\"Listener removed\" listener");
-       BT_ASSERT_PRE(!graph->in_remove_listener,
-               "Graph currently executing a \"listener removed\" listener: "
-               "%!+g", graph);
-       g_array_append_val(graph->listeners.filter_filter_ports_connected,
-               listener);
-       listener_id = graph->listeners.filter_filter_ports_connected->len - 1;
-       BT_LIB_LOGD("Added \"filter to filter component ports connected\" listener to graph: "
-               "%![graph-]+g, listener-addr=%p, id=%d", graph, listener,
-               listener_id);
-
-       if (listener_id) {
-               *out_listener_id = listener_id;
-       }
-
-       return BT_FUNC_STATUS_OK;
-}
-
-enum bt_graph_add_listener_status
-bt_graph_add_filter_sink_component_ports_connected_listener(
-               struct bt_graph *graph,
-               bt_graph_filter_sink_component_ports_connected_listener_func func,
-               bt_graph_listener_removed_func listener_removed, void *data,
-               bt_listener_id *out_listener_id)
-{
-       struct bt_graph_listener_ports_connected listener = {
-               .base = {
-                       .removed = listener_removed,
-                       .data = data,
-               },
-               .func = (ports_connected_func_t) func,
-       };
-       bt_listener_id listener_id;
-
-       BT_ASSERT_PRE_NO_ERROR();
-       BT_ASSERT_PRE_NON_NULL(graph, "Graph");
-       BT_ASSERT_PRE_NON_NULL(func, "Listener");
-       BT_ASSERT_PRE_NON_NULL(func, "\"Listener removed\" listener");
-       BT_ASSERT_PRE(!graph->in_remove_listener,
-               "Graph currently executing a \"listener removed\" listener: "
-               "%!+g", graph);
-       g_array_append_val(graph->listeners.filter_sink_ports_connected,
-               listener);
-       listener_id = graph->listeners.filter_sink_ports_connected->len - 1;
-       BT_LIB_LOGD("Added \"filter to sink component ports connected\" listener to graph: "
-               "%![graph-]+g, listener-addr=%p, id=%d", graph, listener,
-               listener_id);
-
-       if (listener_id) {
-               *out_listener_id = listener_id;
-       }
-
-       return BT_FUNC_STATUS_OK;
-}
-
 BT_HIDDEN
 enum bt_graph_listener_func_status bt_graph_notify_port_added(
                struct bt_graph *graph, struct bt_port *port)
@@ -1167,85 +928,6 @@ end:
        return status;
 }
 
-BT_HIDDEN
-enum bt_graph_listener_func_status bt_graph_notify_ports_connected(
-               struct bt_graph *graph, struct bt_port *upstream_port,
-               struct bt_port *downstream_port)
-{
-       uint64_t i;
-       GArray *listeners;
-       struct bt_component *upstream_comp;
-       struct bt_component *downstream_comp;
-       enum bt_graph_listener_func_status status = BT_FUNC_STATUS_OK;
-
-       BT_ASSERT(graph);
-       BT_ASSERT(upstream_port);
-       BT_ASSERT(downstream_port);
-       BT_LIB_LOGD("Notifying graph listeners that ports were connected: "
-               "%![graph-]+g, %![up-port-]+p, %![down-port-]+p",
-               graph, upstream_port, downstream_port);
-       upstream_comp = bt_port_borrow_component_inline(upstream_port);
-       BT_ASSERT(upstream_comp);
-       downstream_comp = bt_port_borrow_component_inline(downstream_port);
-       BT_ASSERT(downstream_comp);
-
-       switch (upstream_comp->class->type) {
-       case BT_COMPONENT_CLASS_TYPE_SOURCE:
-       {
-               switch (downstream_comp->class->type) {
-               case BT_COMPONENT_CLASS_TYPE_FILTER:
-                       listeners =
-                               graph->listeners.source_filter_ports_connected;
-                       break;
-               case BT_COMPONENT_CLASS_TYPE_SINK:
-                       listeners =
-                               graph->listeners.source_sink_ports_connected;
-                       break;
-               default:
-                       bt_common_abort();
-               }
-
-               break;
-       }
-       case BT_COMPONENT_CLASS_TYPE_FILTER:
-       {
-               switch (downstream_comp->class->type) {
-               case BT_COMPONENT_CLASS_TYPE_FILTER:
-                       listeners =
-                               graph->listeners.filter_filter_ports_connected;
-                       break;
-               case BT_COMPONENT_CLASS_TYPE_SINK:
-                       listeners =
-                               graph->listeners.filter_sink_ports_connected;
-                       break;
-               default:
-                       bt_common_abort();
-               }
-
-               break;
-       }
-       default:
-               bt_common_abort();
-       }
-
-       for (i = 0; i < listeners->len; i++) {
-               struct bt_graph_listener_ports_connected *listener =
-                       &g_array_index(listeners,
-                               struct bt_graph_listener_ports_connected, i);
-
-               BT_ASSERT(listener->func);
-               status = listener->func(upstream_comp, downstream_comp,
-                       upstream_port, downstream_port, listener->base.data);
-               BT_ASSERT_POST_DEV_NO_ERROR_IF_NO_ERROR_STATUS(status);
-               if (status != BT_FUNC_STATUS_OK) {
-                       goto end;
-               }
-       }
-
-end:
-       return status;
-}
-
 BT_HIDDEN
 void bt_graph_remove_connection(struct bt_graph *graph,
                struct bt_connection *connection)
index ac431d2a3635132882c50be765d72faaec87fe60..672cb7e38518a463b4d9d690844fbf0fd3a0df90 100644 (file)
@@ -128,10 +128,6 @@ struct bt_graph {
                GArray *filter_output_port_added;
                GArray *filter_input_port_added;
                GArray *sink_input_port_added;
-               GArray *source_filter_ports_connected;
-               GArray *source_sink_ports_connected;
-               GArray *filter_filter_ports_connected;
-               GArray *filter_sink_ports_connected;
        } listeners;
 
        /* Pool of `struct bt_message_event *` */
@@ -175,11 +171,6 @@ BT_HIDDEN
 enum bt_graph_listener_func_status bt_graph_notify_port_added(struct bt_graph *graph,
                struct bt_port *port);
 
-BT_HIDDEN
-enum bt_graph_listener_func_status bt_graph_notify_ports_connected(
-               struct bt_graph *graph, struct bt_port *upstream_port,
-               struct bt_port *downstream_port);
-
 BT_HIDDEN
 void bt_graph_remove_connection(struct bt_graph *graph,
                struct bt_connection *connection);
index 8c2a0621f2f0b6bcbed107dface114a2ab5a561b..3a52dd45a3850d09637324476598d51f3423a76c 100644 (file)
@@ -574,28 +574,13 @@ class GraphTestCase(unittest.TestCase):
             nonlocal calls
             calls.append((port_added_listener, component, port))
 
-        def ports_connected_listener(
-            upstream_component, upstream_port, downstream_component, downstream_port
-        ):
-            nonlocal calls
-            calls.append(
-                (
-                    ports_connected_listener,
-                    upstream_component,
-                    upstream_port,
-                    downstream_component,
-                    downstream_port,
-                )
-            )
-
         calls = []
         self._graph.add_port_added_listener(port_added_listener)
-        self._graph.add_ports_connected_listener(ports_connected_listener)
         src = self._graph.add_component(MySource, 'src')
         sink = self._graph.add_component(MySink, 'sink')
         self._graph.connect_ports(src.output_ports['out'], sink.input_ports['in'])
 
-        self.assertEqual(len(calls), 5)
+        self.assertEqual(len(calls), 4)
 
         self.assertIs(calls[0][0], port_added_listener)
         self.assertEqual(calls[0][1].name, 'src')
@@ -613,12 +598,6 @@ class GraphTestCase(unittest.TestCase):
         self.assertEqual(calls[3][1].name, 'sink')
         self.assertEqual(calls[3][2].name, 'taste')
 
-        self.assertIs(calls[4][0], ports_connected_listener)
-        self.assertEqual(calls[4][1].name, 'src')
-        self.assertEqual(calls[4][2].name, 'out')
-        self.assertEqual(calls[4][3].name, 'sink')
-        self.assertEqual(calls[4][4].name, 'in')
-
     def test_invalid_listeners(self):
         class MyIter(bt2._UserMessageIterator):
             def __next__(self):
@@ -641,8 +620,6 @@ class GraphTestCase(unittest.TestCase):
 
         with self.assertRaises(TypeError):
             self._graph.add_port_added_listener(1234)
-        with self.assertRaises(TypeError):
-            self._graph.add_ports_connected_listener(1234)
 
     def test_raise_in_component_init(self):
         class MySink(bt2._UserSinkComponent):
@@ -674,35 +651,6 @@ class GraphTestCase(unittest.TestCase):
         with self.assertRaises(bt2._Error):
             graph.add_component(MySink, 'comp')
 
-    def test_raise_in_ports_connected_listener(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MySource(bt2._UserSourceComponent, message_iterator_class=MyIter):
-            def __init__(self, config, params, obj):
-                self._add_output_port('out')
-
-        class MySink(bt2._UserSinkComponent):
-            def __init__(self, config, params, obj):
-                self._add_input_port('in')
-
-            def _user_consume(self):
-                raise bt2.Stop
-
-        def ports_connected_listener(
-            upstream_component, upstream_port, downstream_component, downstream_port
-        ):
-            raise ValueError('oh noes!')
-
-        graph = bt2.Graph()
-        graph.add_ports_connected_listener(ports_connected_listener)
-        up = graph.add_component(MySource, 'down')
-        down = graph.add_component(MySink, 'up')
-
-        with self.assertRaises(bt2._Error):
-            graph.connect_ports(up.output_ports['out'], down.input_ports['in'])
-
 
 if __name__ == '__main__':
     unittest.main()
index fedbdd03a97b8f2a8875e15abfaa5ba78f24c91e..184528d1a1a7b6b8fa09a7ead957e1258ebf6069 100644 (file)
 
 #include "tap/tap.h"
 
-#define NR_TESTS       33
+#define NR_TESTS       26
 
 enum event_type {
        SRC_COMP_OUTPUT_PORT_CONNECTED,
        SINK_COMP_INPUT_PORT_CONNECTED,
        GRAPH_SRC_OUTPUT_PORT_ADDED,
        GRAPH_SINK_INPUT_PORT_ADDED,
-       GRAPH_SRC_SINK_PORTS_CONNECTED,
 };
 
 enum test {
@@ -69,13 +68,6 @@ struct event {
                        const bt_component *comp;
                        const bt_port *port;
                } graph_sink_input_port_added;
-
-               struct {
-                       const bt_component *upstream_comp;
-                       const bt_component *downstream_comp;
-                       const bt_port *upstream_port;
-                       const bt_port *downstream_port;
-               } graph_src_sink_ports_connected;
        } data;
 };
 
@@ -158,27 +150,6 @@ bool compare_events(struct event *ev_a, struct event *ev_b)
                                return false;
                        }
                        break;
-               case GRAPH_SRC_SINK_PORTS_CONNECTED:
-                       if (ev_a->data.graph_src_sink_ports_connected.upstream_comp !=
-                                       ev_b->data.graph_src_sink_ports_connected.upstream_comp) {
-                               return false;
-                       }
-
-                       if (ev_a->data.graph_src_sink_ports_connected.downstream_comp !=
-                                       ev_b->data.graph_src_sink_ports_connected.downstream_comp) {
-                               return false;
-                       }
-
-                       if (ev_a->data.graph_src_sink_ports_connected.upstream_port !=
-                                       ev_b->data.graph_src_sink_ports_connected.upstream_port) {
-                               return false;
-                       }
-
-                       if (ev_a->data.graph_src_sink_ports_connected.downstream_port !=
-                                       ev_b->data.graph_src_sink_ports_connected.downstream_port) {
-                               return false;
-                       }
-                       break;
                default:
                        abort();
        }
@@ -363,32 +334,6 @@ bt_graph_listener_func_status graph_sink_input_port_added(
        return BT_GRAPH_LISTENER_FUNC_STATUS_OK;
 }
 
-static
-bt_graph_listener_func_status graph_src_sink_ports_connected(
-               const bt_component_source *upstream_comp,
-               const bt_component_sink *downstream_comp,
-               const bt_port_output *upstream_port,
-               const bt_port_input *downstream_port, void *data)
-{
-       struct event event = {
-               .type = GRAPH_SRC_SINK_PORTS_CONNECTED,
-               .data.graph_src_sink_ports_connected = {
-                       .upstream_comp =
-                               bt_component_source_as_component_const(upstream_comp),
-                               .downstream_comp =
-                               bt_component_sink_as_component_const(downstream_comp),
-                               .upstream_port =
-                               bt_port_output_as_port_const(upstream_port),
-                               .downstream_port =
-                               bt_port_input_as_port_const(downstream_port),
-               },
-       };
-
-       append_event(&event);
-
-       return BT_GRAPH_LISTENER_FUNC_STATUS_OK;
-}
-
 static
 void init_test(void)
 {
@@ -461,9 +406,6 @@ bt_graph *create_graph(void)
        ret = bt_graph_add_sink_component_input_port_added_listener(
                graph, graph_sink_input_port_added, NULL, NULL, NULL);
        BT_ASSERT(ret >= 0);
-       ret = bt_graph_add_source_sink_component_ports_connected_listener(
-               graph, graph_src_sink_ports_connected, NULL, NULL, NULL);
-       BT_ASSERT(ret >= 0);
        return graph;
 }
 
@@ -492,8 +434,6 @@ void test_src_adds_port_in_port_connected(void)
        struct event event;
        bt_graph_connect_ports_status status;
        size_t src_port_connected_pos;
-       size_t sink_port_connected_pos;
-       size_t graph_ports_connected_pos;
        size_t graph_port_added_src_pos;
 
        prepare_test(TEST_SRC_ADDS_PORT_IN_PORT_CONNECTED,
@@ -520,8 +460,8 @@ void test_src_adds_port_in_port_connected(void)
        gsrc_hello_port = bt_port_output_as_port_const(src_hello_port);
        gsink_def_port = bt_port_input_as_port_const(sink_def_port);
 
-       /* We're supposed to have 6 events */
-       ok(events->len == 6, "we have the expected number of events");
+       /* We're supposed to have 5 events */
+       ok(events->len == 5, "we have the expected number of events");
 
        /* Source's port added */
        event.type = GRAPH_SRC_OUTPUT_PORT_ADDED;
@@ -556,26 +496,10 @@ void test_src_adds_port_in_port_connected(void)
        event.data.sink_comp_input_port_connected.self_port = gsink_def_port;
        event.data.sink_comp_input_port_connected.other_port = gsrc_def_port;
        ok(has_event(&event), "got the expected sink's port connected event");
-       sink_port_connected_pos = event_pos(&event);
-
-       /* Graph's ports connected */
-       event.type = GRAPH_SRC_SINK_PORTS_CONNECTED;
-       event.data.graph_src_sink_ports_connected.upstream_comp = gsrc;
-       event.data.graph_src_sink_ports_connected.downstream_comp = gsink;
-       event.data.graph_src_sink_ports_connected.upstream_port = gsrc_def_port;
-       event.data.graph_src_sink_ports_connected.downstream_port = gsink_def_port;
-       ok(has_event(&event), "got the expected graph's ports connected event");
-       graph_ports_connected_pos = event_pos(&event);
 
        /* Order of events */
-       ok(src_port_connected_pos < graph_ports_connected_pos,
-               "event order is good (1)");
-       ok(sink_port_connected_pos < graph_ports_connected_pos,
-               "event order is good (2)");
        ok(src_port_connected_pos < graph_port_added_src_pos,
-               "event order is good (3)");
-       ok(graph_port_added_src_pos < graph_ports_connected_pos,
-               "event order is good (4)");
+               "event order is good");
 
        bt_component_source_put_ref(src);
        bt_component_sink_put_ref(sink);
@@ -596,9 +520,6 @@ void test_simple(void)
        const bt_port *gsink_def_port;
        struct event event;
        bt_graph_connect_ports_status status;
-       size_t src_port_connected_pos;
-       size_t sink_port_connected_pos;
-       size_t graph_ports_connected_pos;
 
        prepare_test(TEST_SIMPLE, "simple");
        graph = create_graph();
@@ -619,8 +540,8 @@ void test_simple(void)
        gsrc_def_port = bt_port_output_as_port_const(src_def_port);
        gsink_def_port = bt_port_input_as_port_const(sink_def_port);
 
-       /* We're supposed to have 5 events */
-       ok(events->len == 5, "we have the expected number of events");
+       /* We're supposed to have 4 events */
+       ok(events->len == 4, "we have the expected number of events");
 
        /* Source's port added */
        event.type = GRAPH_SRC_OUTPUT_PORT_ADDED;
@@ -640,7 +561,6 @@ void test_simple(void)
        event.data.src_comp_output_port_connected.self_port = gsrc_def_port;
        event.data.src_comp_output_port_connected.other_port = gsink_def_port;
        ok(has_event(&event), "got the expected source's port connected event");
-       src_port_connected_pos = event_pos(&event);
 
        /* Sink's port connected */
        event.type = SINK_COMP_INPUT_PORT_CONNECTED;
@@ -648,22 +568,6 @@ void test_simple(void)
        event.data.sink_comp_input_port_connected.self_port = gsink_def_port;
        event.data.sink_comp_input_port_connected.other_port = gsrc_def_port;
        ok(has_event(&event), "got the expected sink's port connected event");
-       sink_port_connected_pos = event_pos(&event);
-
-       /* Graph's ports connected */
-       event.type = GRAPH_SRC_SINK_PORTS_CONNECTED;
-       event.data.graph_src_sink_ports_connected.upstream_comp = gsrc;
-       event.data.graph_src_sink_ports_connected.downstream_comp = gsink;
-       event.data.graph_src_sink_ports_connected.upstream_port = gsrc_def_port;
-       event.data.graph_src_sink_ports_connected.downstream_port = gsink_def_port;
-       ok(has_event(&event), "got the expected graph's ports connected event");
-       graph_ports_connected_pos = event_pos(&event);
-
-       /* Order of events */
-       ok(src_port_connected_pos < graph_ports_connected_pos,
-               "event order is good (1)");
-       ok(sink_port_connected_pos < graph_ports_connected_pos,
-               "event order is good (2)");
 
        bt_component_sink_put_ref(sink);
        bt_graph_put_ref(graph);
This page took 0.041399 seconds and 4 git commands to generate.