Values API: split into private and public APIs
[babeltrace.git] / lib / graph / graph.c
index e948c89528f0cdd6af0fba47e5ad7a8ae7e5335f..c01d0b5b743bf7188459b446f026d2dddbff7f23 100644 (file)
 #include <babeltrace/graph/notification-event-internal.h>
 #include <babeltrace/graph/notification-packet-internal.h>
 #include <babeltrace/compiler-internal.h>
+#include <babeltrace/common-internal.h>
 #include <babeltrace/types.h>
 #include <babeltrace/values.h>
+#include <babeltrace/private-values.h>
 #include <babeltrace/values-internal.h>
 #include <babeltrace/assert-internal.h>
 #include <babeltrace/assert-pre-internal.h>
@@ -292,7 +294,7 @@ struct bt_graph *bt_graph_create(void)
 end:
        return graph;
 error:
-       BT_PUT(graph);
+       BT_OBJECT_PUT_REF_AND_RESET(graph);
        goto end;
 }
 
@@ -450,17 +452,56 @@ enum bt_graph_status bt_graph_connect_ports(struct bt_graph *graph,
         * Notify both components that their port is connected.
         */
        BT_LOGD_STR("Notifying upstream component that its port is connected.");
-       bt_component_port_connected(upstream_component, upstream_port,
-               downstream_port);
+       component_status = bt_component_port_connected(upstream_component,
+               upstream_port, downstream_port);
+       if (component_status != BT_COMPONENT_STATUS_OK) {
+               BT_LOGW("Error while notifying upstream component that its port is connected: "
+                       "status=%s, graph-addr=%p, "
+                       "upstream-comp-addr=%p, upstream-comp-name=\"%s\", "
+                       "downstream-comp-addr=%p, downstream-comp-name=\"%s\", "
+                       "upstream-port-addr=%p, upstream-port-name=\"%s\", "
+                       "downstream-port-addr=%p, downstream-port-name=\"%s\"",
+                       bt_component_status_string(component_status), graph,
+                       upstream_component, bt_component_get_name(upstream_component),
+                       downstream_component, bt_component_get_name(downstream_component),
+                       upstream_port, bt_port_get_name(upstream_port),
+                       downstream_port, bt_port_get_name(downstream_port));
+               bt_connection_end(connection, true);
+               status = bt_graph_status_from_component_status(
+                       component_status);
+               goto end;
+       }
+
+       connection->notified_upstream_port_connected = true;
        BT_LOGD_STR("Notifying downstream component that its port is connected.");
-       bt_component_port_connected(downstream_component, downstream_port,
-               upstream_port);
+       component_status = bt_component_port_connected(downstream_component,
+               downstream_port, upstream_port);
+       if (component_status != BT_COMPONENT_STATUS_OK) {
+               BT_LOGW("Error while notifying downstream component that its port is connected: "
+                       "status=%s, graph-addr=%p, "
+                       "upstream-comp-addr=%p, upstream-comp-name=\"%s\", "
+                       "downstream-comp-addr=%p, downstream-comp-name=\"%s\", "
+                       "upstream-port-addr=%p, upstream-port-name=\"%s\", "
+                       "downstream-port-addr=%p, downstream-port-name=\"%s\"",
+                       bt_component_status_string(component_status), graph,
+                       upstream_component, bt_component_get_name(upstream_component),
+                       downstream_component, bt_component_get_name(downstream_component),
+                       upstream_port, bt_port_get_name(upstream_port),
+                       downstream_port, bt_port_get_name(downstream_port));
+               bt_connection_end(connection, true);
+               status = bt_graph_status_from_component_status(
+                       component_status);
+               goto end;
+       }
+
+       connection->notified_downstream_port_connected = true;
 
        /*
         * Notify the graph's creator that both ports are connected.
         */
        BT_LOGD_STR("Notifying graph's user that new component ports are connected.");
        bt_graph_notify_ports_connected(graph, upstream_port, downstream_port);
+       connection->notified_graph_ports_connected = true;
        BT_LOGD("Connected component ports within graph: "
                "graph-addr=%p, "
                "upstream-comp-addr=%p, upstream-comp-name=\"%s\", "
@@ -480,11 +521,11 @@ enum bt_graph_status bt_graph_connect_ports(struct bt_graph *graph,
        }
 
 end:
-       bt_put(upstream_graph);
-       bt_put(downstream_graph);
-       bt_put(upstream_component);
-       bt_put(downstream_component);
-       bt_put(connection);
+       bt_object_put_ref(upstream_graph);
+       bt_object_put_ref(downstream_graph);
+       bt_object_put_ref(upstream_component);
+       bt_object_put_ref(downstream_component);
+       bt_object_put_ref(connection);
        if (graph) {
                (void) init_can_consume;
                bt_graph_set_can_consume(graph, init_can_consume);
@@ -996,7 +1037,7 @@ enum bt_graph_status bt_graph_add_component_with_init_method_data(
        size_t i;
        bt_bool init_can_consume;
 
-       bt_get(params);
+       bt_object_get_ref(params);
 
        if (!graph) {
                BT_LOGW_STR("Invalid parameter: graph is NULL.");
@@ -1061,12 +1102,14 @@ enum bt_graph_status bt_graph_add_component_with_init_method_data(
                if (!bt_value_is_map(params)) {
                        BT_LOGW("Invalid parameter: initialization parameters must be a map value: "
                                "type=%s",
-                               bt_value_type_string(bt_value_get_type(params)));
+                               bt_common_value_type_string(
+                                       bt_value_get_type(params)));
                        graph_status = BT_GRAPH_STATUS_INVALID;
                        goto end;
                }
        } else {
-               params = bt_value_map_create();
+               params = bt_value_borrow_from_private(
+                       bt_private_value_map_create());
                if (!params) {
                        BT_LOGE_STR("Cannot create map value object.");
                        graph_status = BT_GRAPH_STATUS_NOMEM;
@@ -1143,8 +1186,8 @@ enum bt_graph_status bt_graph_add_component_with_init_method_data(
        }
 
 end:
-       bt_put(component);
-       bt_put(params);
+       bt_object_put_ref(component);
+       bt_object_put_ref(params);
        if (graph) {
                graph->can_consume = init_can_consume;
        }
@@ -1183,7 +1226,7 @@ int bt_graph_remove_unconnected_component(struct bt_graph *graph,
                        bt_component_get_input_port_by_index(component, i);
 
                BT_ASSERT(port);
-               bt_put(port);
+               bt_object_put_ref(port);
 
                if (bt_port_is_connected(port)) {
                        BT_LOGW("Cannot remove component from graph: "
@@ -1205,7 +1248,7 @@ int bt_graph_remove_unconnected_component(struct bt_graph *graph,
                        bt_component_get_output_port_by_index(component, i);
 
                BT_ASSERT(port);
-               bt_put(port);
+               bt_object_put_ref(port);
 
                if (bt_port_is_connected(port)) {
                        BT_LOGW("Cannot remove component from graph: "
This page took 0.033424 seconds and 4 git commands to generate.