From: Philippe Proulx Date: Wed, 11 Dec 2019 20:48:32 +0000 (-0500) Subject: lib, bt2: graph API: remove "ports connected" listeners X-Git-Tag: v2.0.0~38 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=d9d764cc911fa4a1df6c611fd708ea3f41521275 lib, bt2: graph API: remove "ports connected" listeners 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 Change-Id: I218c7b7b57c52f2e8589b35e3d89f38dfd961c0a Reviewed-on: https://review.lttng.org/c/babeltrace/+/2636 Tested-by: jenkins --- diff --git a/include/babeltrace2/graph/graph.h b/include/babeltrace2/graph/graph.h index e4d53e6e..f66b9538 100644 --- a/include/babeltrace2/graph/graph.h +++ b/include/babeltrace2/graph/graph.h @@ -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, diff --git a/src/bindings/python/bt2/bt2/graph.py b/src/bindings/python/bt2/bt2/graph.py index 79be1ca8..b1d59700 100644 --- a/src/bindings/python/bt2/bt2/graph.py +++ b/src/bindings/python/bt2/bt2/graph.py @@ -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') diff --git a/src/bindings/python/bt2/bt2/native_bt_graph.i b/src/bindings/python/bt2/bt2/native_bt_graph.i index a2e623e5..4a7b9f6d 100644 --- a/src/bindings/python/bt2/bt2/native_bt_graph.i +++ b/src/bindings/python/bt2/bt2/native_bt_graph.i @@ -113,9 +113,6 @@ 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, diff --git a/src/bindings/python/bt2/bt2/native_bt_graph.i.h b/src/bindings/python/bt2/bt2/native_bt_graph.i.h index e310e53b..e45fea61 100644 --- a/src/bindings/python/bt2/bt2/native_bt_graph.i.h +++ b/src/bindings/python/bt2/bt2/native_bt_graph.i.h @@ -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( diff --git a/src/lib/graph/graph.c b/src/lib/graph/graph.c index 22c4f92f..8416b1f6 100644 --- a/src/lib/graph/graph.c +++ b/src/lib/graph/graph.c @@ -55,10 +55,6 @@ 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) diff --git a/src/lib/graph/graph.h b/src/lib/graph/graph.h index ac431d2a..672cb7e3 100644 --- a/src/lib/graph/graph.h +++ b/src/lib/graph/graph.h @@ -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); diff --git a/tests/bindings/python/bt2/test_graph.py b/tests/bindings/python/bt2/test_graph.py index 8c2a0621..3a52dd45 100644 --- a/tests/bindings/python/bt2/test_graph.py +++ b/tests/bindings/python/bt2/test_graph.py @@ -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() diff --git a/tests/lib/test_graph_topo.c b/tests/lib/test_graph_topo.c index fedbdd03..184528d1 100644 --- a/tests/lib/test_graph_topo.c +++ b/tests/lib/test_graph_topo.c @@ -26,14 +26,13 @@ #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);