Call a single "ports connected/disconnected" graph listener instead of two
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Wed, 29 Mar 2017 15:55:11 +0000 (11:55 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 28 May 2017 16:57:39 +0000 (12:57 -0400)
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 <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/babeltrace/graph/graph-internal.h
include/babeltrace/graph/graph.h
lib/component/connection.c
lib/component/graph.c

index e8e9e7f6e3f1d03d325aa5de35a829f2e99e3e2f..85c196be6e2bf4793d09da989f7b9b96b80b6307 100644 (file)
@@ -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 */
index c42802491647dd4d705966c9fb9fffe219496bf5..884ba5f1c52c6cd6fd14ac2e18a930abf359f33b 100644 (file)
@@ -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
 }
index 5075c309885d42b792c6c3aef2249e858d4063f2..1b58c02689e62b01da31e974348ec8b341532e7c 100644 (file)
@@ -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(
index 1fb465ae094eae9510c97e553f9ae776766026f6..a770be30079c112c5318d81b54409e0e9b9bc197 100644 (file)
@@ -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);
        }
 }
This page took 0.032395 seconds and 4 git commands to generate.