Make bt_graph_add_*_listener() function return a listener ID
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 26 May 2017 19:02:51 +0000 (15:02 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 9 Jun 2017 20:58:11 +0000 (16:58 -0400)
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 <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
cli/babeltrace.c
include/babeltrace/graph/graph.h
lib/graph/graph.c
tests/lib/test_graph_topo.c
tests/plugins/test-utils-muxer.c

index 3d37d4e01010d941def39933ab403f28aa1ff7eb..f63150a273632ff6d753592cd2ba854143339856 100644 (file)
@@ -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;
        }
 
index ce83268a69f846834c6b5b3e38aa317507344120..06f2af1b122407a46b07e29465a1fec1969f0d15 100644 (file)
@@ -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);
index b557fa43ab19c6dac82fc39ffd9ddacfa13528e1..e71eaeede02e3e7696224a8553971716b6b3bf08 100644 (file)
@@ -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
index 0d6d6edb28d22f1b7fd016ce07d106aee509f6f8..92ebac80b5baab7a68fbafc8c0b3a131fd963374 100644 (file)
@@ -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;
 }
 
index c1aff68a407d8e2da8a53f343bde09f52a5859e8..5871e6614dc232d8ca237b98b2de25d534deaf79 100644 (file)
@@ -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);
This page took 0.032503 seconds and 4 git commands to generate.