From 0d107cdd376ff07c7bc6da9dfd46d57463442df1 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Fri, 26 May 2017 15:02:51 -0400 Subject: [PATCH] Make bt_graph_add_*_listener() function return a listener ID MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This is the expected API to identify all the user listeners of the library. You can keep the returned ID, a simple int, to remove the listener from the object later if needed. With the current API, you cannot remove graph listeners, but we could add the functions to do so in the future. Signed-off-by: Philippe Proulx Signed-off-by: Jérémie Galarneau --- cli/babeltrace.c | 12 ++++-- include/babeltrace/graph/graph.h | 12 ++---- lib/graph/graph.c | 63 +++++++++++++++++--------------- tests/lib/test_graph_topo.c | 8 ++-- tests/plugins/test-utils-muxer.c | 4 +- 5 files changed, 52 insertions(+), 47 deletions(-) diff --git a/cli/babeltrace.c b/cli/babeltrace.c index 3d37d4e0..f63150a2 100644 --- a/cli/babeltrace.c +++ b/cli/babeltrace.c @@ -1494,25 +1494,29 @@ int cmd_run_ctx_init(struct cmd_run_ctx *ctx, struct bt_config *cfg) the_graph = ctx->graph; ret = bt_graph_add_port_added_listener(ctx->graph, graph_port_added_listener, ctx); - if (ret) { + if (ret < 0) { + BT_LOGE_STR("Cannot add \"port added\" listener to graph."); goto error; } ret = bt_graph_add_port_removed_listener(ctx->graph, graph_port_removed_listener, ctx); - if (ret) { + if (ret < 0) { + BT_LOGE_STR("Cannot add \"port removed\" listener to graph."); goto error; } ret = bt_graph_add_ports_connected_listener(ctx->graph, graph_ports_connected_listener, ctx); - if (ret) { + if (ret < 0) { + BT_LOGE_STR("Cannot add \"ports connected\" listener to graph."); goto error; } ret = bt_graph_add_ports_disconnected_listener(ctx->graph, graph_ports_disconnected_listener, ctx); - if (ret) { + if (ret < 0) { + BT_LOGE_STR("Cannot add \"ports disconnected\" listener to graph."); goto error; } diff --git a/include/babeltrace/graph/graph.h b/include/babeltrace/graph/graph.h index ce83268a..06f2af1b 100644 --- a/include/babeltrace/graph/graph.h +++ b/include/babeltrace/graph/graph.h @@ -92,20 +92,16 @@ extern enum bt_graph_status bt_graph_run(struct bt_graph *graph); */ extern enum bt_graph_status bt_graph_consume(struct bt_graph *graph); -extern enum bt_graph_status bt_graph_add_port_added_listener( - struct bt_graph *graph, +extern int bt_graph_add_port_added_listener(struct bt_graph *graph, bt_graph_port_added_listener listener, void *data); -extern enum bt_graph_status bt_graph_add_port_removed_listener( - struct bt_graph *graph, +extern int 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_ports_connected_listener( - struct bt_graph *graph, +extern int bt_graph_add_ports_connected_listener(struct bt_graph *graph, bt_graph_ports_connected_listener listener, void *data); -extern enum bt_graph_status bt_graph_add_ports_disconnected_listener( - struct bt_graph *graph, +extern int bt_graph_add_ports_disconnected_listener(struct bt_graph *graph, bt_graph_ports_disconnected_listener listener, void *data); extern enum bt_graph_status bt_graph_cancel(struct bt_graph *graph); diff --git a/lib/graph/graph.c b/lib/graph/graph.c index b557fa43..e71eaeed 100644 --- a/lib/graph/graph.c +++ b/lib/graph/graph.c @@ -510,7 +510,7 @@ end: } static -void add_listener(GArray *listeners, void *func, void *data) +int add_listener(GArray *listeners, void *func, void *data) { struct bt_graph_listener listener = { .func = func, @@ -518,110 +518,115 @@ void add_listener(GArray *listeners, void *func, void *data) }; g_array_append_val(listeners, listener); + return listeners->len - 1; } -enum bt_graph_status bt_graph_add_port_added_listener( +int bt_graph_add_port_added_listener( struct bt_graph *graph, bt_graph_port_added_listener listener, void *data) { - enum bt_graph_status status = BT_GRAPH_STATUS_OK; + int ret; if (!graph) { BT_LOGW_STR("Invalid parameter: graph is NULL."); - status = BT_GRAPH_STATUS_INVALID; + ret = -1; goto end; } if (!listener) { BT_LOGW_STR("Invalid parameter: listener is NULL."); - status = BT_GRAPH_STATUS_INVALID; + ret = -1; goto end; } - add_listener(graph->listeners.port_added, listener, data); + ret = add_listener(graph->listeners.port_added, listener, data); BT_LOGV("Added \"port added\" listener to graph: " - "graph-addr=%p, listener-addr=%p", graph, listener); + "graph-addr=%p, listener-addr=%p, pos=%d", + graph, listener, ret); end: - return status; + return ret; } -enum bt_graph_status bt_graph_add_port_removed_listener( +int bt_graph_add_port_removed_listener( struct bt_graph *graph, bt_graph_port_removed_listener listener, void *data) { - enum bt_graph_status status = BT_GRAPH_STATUS_OK; + int ret; if (!graph) { BT_LOGW_STR("Invalid parameter: graph is NULL."); - status = BT_GRAPH_STATUS_INVALID; + ret = -1; goto end; } if (!listener) { BT_LOGW_STR("Invalid parameter: listener is NULL."); - status = BT_GRAPH_STATUS_INVALID; + ret = -1; goto end; } - add_listener(graph->listeners.port_removed, listener, data); + ret = add_listener(graph->listeners.port_removed, listener, data); BT_LOGV("Added \"port removed\" listener to graph: " - "graph-addr=%p, listener-addr=%p", graph, listener); + "graph-addr=%p, listener-addr=%p, pos=%d", + graph, listener, ret); end: - return status; + return ret; } -enum bt_graph_status bt_graph_add_ports_connected_listener( +int bt_graph_add_ports_connected_listener( struct bt_graph *graph, bt_graph_ports_connected_listener listener, void *data) { - enum bt_graph_status status = BT_GRAPH_STATUS_OK; + int ret; if (!graph) { BT_LOGW_STR("Invalid parameter: graph is NULL."); - status = BT_GRAPH_STATUS_INVALID; + ret = -1; goto end; } if (!listener) { BT_LOGW_STR("Invalid parameter: listener is NULL."); - status = BT_GRAPH_STATUS_INVALID; + ret = -1; goto end; } - add_listener(graph->listeners.ports_connected, listener, data); + ret = add_listener(graph->listeners.ports_connected, listener, data); BT_LOGV("Added \"port connected\" listener to graph: " - "graph-addr=%p, listener-addr=%p", graph, listener); + "graph-addr=%p, listener-addr=%p, pos=%d", + graph, listener, ret); end: - return status; + return ret; } -enum bt_graph_status bt_graph_add_ports_disconnected_listener( +int bt_graph_add_ports_disconnected_listener( struct bt_graph *graph, bt_graph_ports_disconnected_listener listener, void *data) { - enum bt_graph_status status = BT_GRAPH_STATUS_OK; + int ret; if (!graph) { BT_LOGW_STR("Invalid parameter: graph is NULL."); - status = BT_GRAPH_STATUS_INVALID; + ret = -1; goto end; } if (!listener) { BT_LOGW_STR("Invalid parameter: listener is NULL."); - status = BT_GRAPH_STATUS_INVALID; + ret = -1; goto end; } - add_listener(graph->listeners.ports_disconnected, listener, data); + ret = add_listener(graph->listeners.ports_disconnected, listener, data); BT_LOGV("Added \"port disconnected\" listener to graph: " - "graph-addr=%p, listener-addr=%p", graph, listener); + "graph-addr=%p, listener-addr=%p, pos=%d", + graph, listener, ret); end: - return status; + return ret; } BT_HIDDEN diff --git a/tests/lib/test_graph_topo.c b/tests/lib/test_graph_topo.c index 0d6d6edb..92ebac80 100644 --- a/tests/lib/test_graph_topo.c +++ b/tests/lib/test_graph_topo.c @@ -618,16 +618,16 @@ struct bt_graph *create_graph(void) assert(graph); ret = bt_graph_add_port_added_listener(graph, graph_port_added, NULL); - assert(ret == 0); + assert(ret >= 0); ret = bt_graph_add_port_removed_listener(graph, graph_port_removed, NULL); - assert(ret == 0); + assert(ret >= 0); ret = bt_graph_add_ports_connected_listener(graph, graph_ports_connected, NULL); - assert(ret == 0); + assert(ret >= 0); ret = bt_graph_add_ports_disconnected_listener(graph, graph_ports_disconnected, NULL); - assert(ret == 0); + assert(ret >= 0); return graph; } diff --git a/tests/plugins/test-utils-muxer.c b/tests/plugins/test-utils-muxer.c index c1aff68a..5871e661 100644 --- a/tests/plugins/test-utils-muxer.c +++ b/tests/plugins/test-utils-muxer.c @@ -1477,7 +1477,7 @@ void test_single_end_then_multiple_full(void) ret = bt_graph_add_port_added_listener(graph, graph_port_added_listener_connect_to_avail_muxer_port, &graph_listener_data); - assert(ret == 0); + assert(ret >= 0); /* Connect source output ports to muxer input ports */ count = bt_component_source_get_output_port_count(src_comp); @@ -1606,7 +1606,7 @@ void test_single_again_end_then_multiple_full(void) ret = bt_graph_add_port_added_listener(graph, graph_port_added_listener_connect_to_avail_muxer_port, &graph_listener_data); - assert(ret == 0); + assert(ret >= 0); /* Connect source output ports to muxer input ports */ count = bt_component_source_get_output_port_count(src_comp); -- 2.34.1