From f345f8bb507db96ad6f068f404603f6390fa34ce Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Wed, 29 Mar 2017 11:55:11 -0400 Subject: [PATCH] Call a single "ports connected/disconnected" graph listener instead of two MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit It is reasonable to believe that a user implementing a "ports connected" or "ports disconnected" graph listener wants both the upstream and downstream ports, instead of getting called two times with one and the other. Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- include/babeltrace/graph/graph-internal.h | 15 ++++--- include/babeltrace/graph/graph.h | 18 ++++---- lib/component/connection.c | 24 +++------- lib/component/graph.c | 54 ++++++++++++----------- 4 files changed, 52 insertions(+), 59 deletions(-) diff --git a/include/babeltrace/graph/graph-internal.h b/include/babeltrace/graph/graph-internal.h index e8e9e7f6..85c196be 100644 --- a/include/babeltrace/graph/graph-internal.h +++ b/include/babeltrace/graph/graph-internal.h @@ -58,8 +58,8 @@ struct bt_graph { struct { GArray *port_added; GArray *port_removed; - GArray *port_connected; - GArray *port_disconnected; + GArray *ports_connected; + GArray *ports_disconnected; } listeners; }; @@ -71,11 +71,14 @@ void bt_graph_notify_port_removed(struct bt_graph *graph, struct bt_component *comp, struct bt_port *port); BT_HIDDEN -void bt_graph_notify_port_connected(struct bt_graph *graph, - struct bt_port *port); +void bt_graph_notify_ports_connected(struct bt_graph *graph, + struct bt_port *upstream_port, struct bt_port *downstream_port); BT_HIDDEN -void bt_graph_notify_port_disconnected(struct bt_graph *graph, - struct bt_component *comp, struct bt_port *port); +void bt_graph_notify_ports_disconnected(struct bt_graph *graph, + struct bt_component *upstream_comp, + struct bt_component *downstream_comp, + struct bt_port *upstream_port, + struct bt_port *downstream_port); #endif /* BABELTRACE_COMPONENT_COMPONENT_GRAPH_INTERNAL_H */ diff --git a/include/babeltrace/graph/graph.h b/include/babeltrace/graph/graph.h index c4280249..884ba5f1 100644 --- a/include/babeltrace/graph/graph.h +++ b/include/babeltrace/graph/graph.h @@ -58,10 +58,12 @@ typedef void (*bt_graph_port_added_listener)(struct bt_port *port, void *data); typedef void (*bt_graph_port_removed_listener)(struct bt_component *component, struct bt_port *port, void *data); -typedef void (*bt_graph_port_connected_listener)(struct bt_port *port, - void *data); -typedef void (*bt_graph_port_disconnected_listener)( - struct bt_component *component, struct bt_port *port, +typedef void (*bt_graph_ports_connected_listener)(struct bt_port *upstream_port, + struct bt_port *downstream_port, void *data); +typedef void (*bt_graph_ports_disconnected_listener)( + struct bt_component *upstream_component, + struct bt_component *downstream_component, + struct bt_port *upstream_port, struct bt_port *downstream_port, void *data); extern struct bt_graph *bt_graph_create(void); @@ -106,13 +108,13 @@ extern enum bt_graph_status bt_graph_add_port_removed_listener( struct bt_graph *graph, bt_graph_port_removed_listener listener, void *data); -extern enum bt_graph_status bt_graph_add_port_connected_listener( +extern enum bt_graph_status bt_graph_add_ports_connected_listener( struct bt_graph *graph, - bt_graph_port_connected_listener listener, void *data); + bt_graph_ports_connected_listener listener, void *data); -extern enum bt_graph_status bt_graph_add_port_disconnected_listener( +extern enum bt_graph_status bt_graph_add_ports_disconnected_listener( struct bt_graph *graph, - bt_graph_port_disconnected_listener listener, void *data); + bt_graph_ports_disconnected_listener listener, void *data); #ifdef __cplusplus } diff --git a/lib/component/connection.c b/lib/component/connection.c index 5075c309..1b58c026 100644 --- a/lib/component/connection.c +++ b/lib/component/connection.c @@ -95,6 +95,7 @@ void bt_connection_disconnect_ports(struct bt_connection *conn) struct bt_component *upstream_comp = NULL; struct bt_port *downstream_port = conn->downstream_port; struct bt_port *upstream_port = conn->upstream_port; + struct bt_graph *graph = (void *) bt_object_get_parent(conn); if (downstream_port) { downstream_comp = bt_port_get_component(downstream_port); @@ -117,27 +118,12 @@ void bt_connection_disconnect_ports(struct bt_connection *conn) bt_component_port_disconnected(upstream_comp, upstream_port); } - if (upstream_comp) { - struct bt_graph *graph = bt_component_get_graph(upstream_comp); - - assert(graph); - bt_graph_notify_port_disconnected(graph, upstream_comp, - upstream_port); - bt_put(graph); - } - - if (downstream_comp) { - struct bt_graph *graph = - bt_component_get_graph(downstream_comp); - - assert(graph); - bt_graph_notify_port_disconnected(graph, downstream_comp, - downstream_port); - bt_put(graph); - } - + assert(graph); + bt_graph_notify_ports_disconnected(graph, upstream_comp, + downstream_comp, upstream_port, downstream_port); bt_put(downstream_comp); bt_put(upstream_comp); + bt_put(graph); } struct bt_port *bt_connection_get_upstream_port( diff --git a/lib/component/graph.c b/lib/component/graph.c index 1fb465ae..a770be30 100644 --- a/lib/component/graph.c +++ b/lib/component/graph.c @@ -66,12 +66,12 @@ void bt_graph_destroy(struct bt_object *obj) g_array_free(graph->listeners.port_removed, TRUE); } - if (graph->listeners.port_connected) { - g_array_free(graph->listeners.port_connected, TRUE); + if (graph->listeners.ports_connected) { + g_array_free(graph->listeners.ports_connected, TRUE); } - if (graph->listeners.port_disconnected) { - g_array_free(graph->listeners.port_disconnected, TRUE); + if (graph->listeners.ports_disconnected) { + g_array_free(graph->listeners.ports_disconnected, TRUE); } g_free(graph); @@ -128,12 +128,12 @@ struct bt_graph *bt_graph_create(void) goto error; } - ret = init_listeners_array(&graph->listeners.port_connected); + ret = init_listeners_array(&graph->listeners.ports_connected); if (ret) { goto error; } - ret = init_listeners_array(&graph->listeners.port_disconnected); + ret = init_listeners_array(&graph->listeners.ports_disconnected); if (ret) { goto error; } @@ -270,8 +270,7 @@ struct bt_connection *bt_graph_connect_ports(struct bt_graph *graph, * Both components accepted the connection. Notify the graph's * creator that both ports are connected. */ - bt_graph_notify_port_connected(graph, upstream_port); - bt_graph_notify_port_connected(graph, downstream_port); + bt_graph_notify_ports_connected(graph, upstream_port, downstream_port); end: bt_put(upstream_graph); @@ -673,9 +672,9 @@ end: return status; } -enum bt_graph_status bt_graph_add_port_connected_listener( +enum bt_graph_status bt_graph_add_ports_connected_listener( struct bt_graph *graph, - bt_graph_port_connected_listener listener, void *data) + bt_graph_ports_connected_listener listener, void *data) { enum bt_graph_status status = BT_GRAPH_STATUS_OK; @@ -684,15 +683,15 @@ enum bt_graph_status bt_graph_add_port_connected_listener( goto end; } - add_listener(graph->listeners.port_connected, listener, data); + add_listener(graph->listeners.ports_connected, listener, data); end: return status; } -enum bt_graph_status bt_graph_add_port_disconnected_listener( +enum bt_graph_status bt_graph_add_ports_disconnected_listener( struct bt_graph *graph, - bt_graph_port_disconnected_listener listener, void *data) + bt_graph_ports_disconnected_listener listener, void *data) { enum bt_graph_status status = BT_GRAPH_STATUS_OK; @@ -701,7 +700,7 @@ enum bt_graph_status bt_graph_add_port_disconnected_listener( goto end; } - add_listener(graph->listeners.port_disconnected, listener, data); + add_listener(graph->listeners.ports_disconnected, listener, data); end: return status; @@ -741,35 +740,38 @@ void bt_graph_notify_port_removed(struct bt_graph *graph, } BT_HIDDEN -void bt_graph_notify_port_connected(struct bt_graph *graph, - struct bt_port *port) +void bt_graph_notify_ports_connected(struct bt_graph *graph, + struct bt_port *upstream_port, struct bt_port *downstream_port) { size_t i; - for (i = 0; i < graph->listeners.port_connected->len; i++) { + for (i = 0; i < graph->listeners.ports_connected->len; i++) { struct bt_graph_listener listener = - g_array_index(graph->listeners.port_connected, + g_array_index(graph->listeners.ports_connected, struct bt_graph_listener, i); - bt_graph_port_connected_listener func = listener.func; + bt_graph_ports_connected_listener func = listener.func; assert(func); - func(port, listener.data); + func(upstream_port, downstream_port, listener.data); } } BT_HIDDEN -void bt_graph_notify_port_disconnected(struct bt_graph *graph, - struct bt_component *comp, struct bt_port *port) +void bt_graph_notify_ports_disconnected(struct bt_graph *graph, + struct bt_component *upstream_comp, + struct bt_component *downstream_comp, + struct bt_port *upstream_port, struct bt_port *downstream_port) { size_t i; - for (i = 0; i < graph->listeners.port_disconnected->len; i++) { + for (i = 0; i < graph->listeners.ports_disconnected->len; i++) { struct bt_graph_listener listener = - g_array_index(graph->listeners.port_disconnected, + g_array_index(graph->listeners.ports_disconnected, struct bt_graph_listener, i); - bt_graph_port_disconnected_listener func = listener.func; + bt_graph_ports_disconnected_listener func = listener.func; assert(func); - func(comp, port, listener.data); + func(upstream_comp, downstream_comp, upstream_port, + downstream_port, listener.data); } } -- 2.34.1