struct {
GArray *port_added;
GArray *port_removed;
- GArray *port_connected;
- GArray *port_disconnected;
+ GArray *ports_connected;
+ GArray *ports_disconnected;
} listeners;
};
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 */
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);
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
}
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);
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(
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);
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;
}
* 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);
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;
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;
goto end;
}
- add_listener(graph->listeners.port_disconnected, listener, data);
+ add_listener(graph->listeners.ports_disconnected, listener, data);
end:
return status;
}
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);
}
}