X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fgraph%2Fport.c;h=f119d60b6dfb5414ac805cc90b3b1550c4296f2b;hb=3fadfbc0c91f82c46bd36e6e0657ea93570c9db1;hp=4f974aa1fae91cd1eb1b6b95ef230d7c6e3dc165;hpb=f30343552bcdcf1c3fbc6a476aaeda8251c8d1cb;p=babeltrace.git diff --git a/lib/graph/port.c b/lib/graph/port.c index 4f974aa1..f119d60b 100644 --- a/lib/graph/port.c +++ b/lib/graph/port.c @@ -1,12 +1,7 @@ /* - * port.c - * - * Babeltrace Port - * + * Copyright 2017-2018 Philippe Proulx * Copyright 2017 Jérémie Galarneau * - * Author: Jérémie Galarneau - * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights @@ -27,131 +22,105 @@ */ #define BT_LOG_TAG "PORT" -#include - -#include -#include -#include -#include -#include -#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include static -void bt_port_destroy(struct bt_object *obj) +void destroy_port(struct bt_object *obj) { - struct bt_port *port = container_of(obj, struct bt_port, base); + struct bt_port *port = (void *) obj; - BT_LOGD("Destroying port: addr=%p, name=\"%s\", comp-addr=%p", - port, bt_port_get_name(port), obj->parent); + BT_LIB_LOGD("Destroying port: %!+p", port); if (port->name) { g_string_free(port->name, TRUE); + port->name = NULL; } g_free(port); } -struct bt_port *bt_port_from_private_port( - struct bt_private_port *private_port) -{ - return bt_get(bt_port_from_private(private_port)); -} - BT_HIDDEN struct bt_port *bt_port_create(struct bt_component *parent_component, enum bt_port_type type, const char *name, void *user_data) { struct bt_port *port = NULL; - assert(name); - assert(parent_component); - assert(type == BT_PORT_TYPE_INPUT || type == BT_PORT_TYPE_OUTPUT); - - if (strlen(name) == 0) { - BT_LOGW_STR("Invalid parameter: name is an empty string."); - goto end; - } - + BT_ASSERT(name); + BT_ASSERT(parent_component); + BT_ASSERT(type == BT_PORT_TYPE_INPUT || type == BT_PORT_TYPE_OUTPUT); + BT_ASSERT(strlen(name) > 0); port = g_new0(struct bt_port, 1); if (!port) { BT_LOGE_STR("Failed to allocate one port."); goto end; } - BT_LOGD("Creating port for component: " - "comp-addr=%p, comp-name=\"%s\", port-type=%s, " - "port-name=\"%s\"", - parent_component, bt_component_get_name(parent_component), - bt_port_type_string(type), name); - - bt_object_init(port, bt_port_destroy); + BT_LIB_LOGD("Creating port for component: %![comp-]+c, port-type=%s, " + "port-name=\"%s\"", parent_component, bt_port_type_string(type), + name); + bt_object_init_shared_with_parent(&port->base, destroy_port); port->name = g_string_new(name); if (!port->name) { BT_LOGE_STR("Failed to allocate one GString."); - BT_PUT(port); + BT_OBJECT_PUT_REF_AND_RESET(port); goto end; } port->type = type; port->user_data = user_data; - bt_object_set_parent(port, &parent_component->base); - BT_LOGD("Created port for component: " - "comp-addr=%p, comp-name=\"%s\", port-type=%s, " - "port-name=\"%s\", port-addr=%p", - parent_component, bt_component_get_name(parent_component), - bt_port_type_string(type), name, port); + bt_object_set_parent(&port->base, &parent_component->base); + BT_LIB_LOGD("Created port for component: " + "%![comp-]+c, %![port-]+p", parent_component, port); end: return port; } -const char *bt_port_get_name(struct bt_port *port) -{ - return port ? port->name->str : NULL; -} - -enum bt_port_type bt_port_get_type(struct bt_port *port) +const char *bt_port_get_name(const struct bt_port *port) { - return port ? port->type : BT_PORT_TYPE_UNKOWN; + BT_ASSERT_PRE_NON_NULL(port, "Port"); + return port->name->str; } -struct bt_connection *bt_port_get_connection(struct bt_port *port) +enum bt_port_type bt_port_get_type(const struct bt_port *port) { - struct bt_connection *connection = NULL; - - if (!port) { - BT_LOGW_STR("Invalid parameter: port is NULL."); - goto end; - } - - if (!port->connection) { - /* Not an error: means disconnected */ - goto end; - } - - connection = bt_get(port->connection); - -end: - return connection; + BT_ASSERT_PRE_NON_NULL(port, "Port"); + return port->type; } -struct bt_component *bt_port_get_component(struct bt_port *port) +const struct bt_connection *bt_port_borrow_connection_const( + const struct bt_port *port) { - return (struct bt_component *) bt_object_get_parent(port); + BT_ASSERT_PRE_NON_NULL(port, "Port"); + return port->connection; } -struct bt_private_connection *bt_private_port_get_private_connection( - struct bt_private_port *private_port) +const struct bt_component *bt_port_borrow_component_const( + const struct bt_port *port) { - return bt_private_connection_from_connection(bt_port_get_connection( - bt_port_from_private(private_port))); + BT_ASSERT_PRE_NON_NULL(port, "Port"); + return bt_port_borrow_component_inline(port); } -struct bt_private_component *bt_private_port_get_private_component( - struct bt_private_port *private_port) +struct bt_self_component *bt_self_component_port_borrow_component( + struct bt_self_component_port *port) { - return bt_private_component_from_component(bt_port_get_component( - bt_port_from_private(private_port))); + BT_ASSERT_PRE_NON_NULL(port, "Port"); + return (void *) bt_object_borrow_parent((void *) port); } BT_HIDDEN @@ -164,74 +133,48 @@ void bt_port_set_connection(struct bt_port *port, * connection exists. */ port->connection = connection; - BT_LOGV("Set port's connection: " - "port-addr=%p, port-name=\"%s\", conn-addr=%p", - port, bt_port_get_name(port), connection); + BT_LIB_LOGV("Set port's connection: %![port-]+p, %![conn-]+x", port, + connection); } -int bt_private_port_remove_from_component( - struct bt_private_port *private_port) +bt_bool bt_port_is_connected(const struct bt_port *port) { - int ret = 0; - struct bt_port *port = bt_port_from_private(private_port); - struct bt_component *comp = NULL; - - if (!port) { - BT_LOGW_STR("Invalid parameter: private port is NULL."); - ret = -1; - goto end; - } - - comp = (void *) bt_object_get_parent(port); - - /* bt_component_remove_port() logs details */ - ret = bt_component_remove_port(comp, port); - -end: - bt_put(comp); - return ret; + BT_ASSERT_PRE_NON_NULL(port, "Port"); + return port->connection ? BT_TRUE : BT_FALSE; } -int bt_port_disconnect(struct bt_port *port) +void *bt_self_component_port_get_data(const struct bt_self_component_port *port) { - int ret = 0; - - if (!port) { - BT_LOGW_STR("Invalid parameter: port is NULL."); - ret = -1; - goto end; - } - - if (port->connection) { - bt_connection_disconnect_ports(port->connection); - BT_LOGV("Disconnected port: " - "port-addr=%p, port-name=\"%s\"", - port, bt_port_get_name(port)); - } + BT_ASSERT_PRE_NON_NULL(port, "Port"); + return ((struct bt_port *) port)->user_data; +} -end: - return ret; +void bt_port_get_ref(const struct bt_port *port) +{ + bt_object_get_ref(port); } -bt_bool bt_port_is_connected(struct bt_port *port) +void bt_port_put_ref(const struct bt_port *port) { - int ret; + bt_object_put_ref(port); +} - if (!port) { - BT_LOGW_STR("Invalid parameter: port is NULL."); - ret = -1; - goto end; - } +void bt_port_input_get_ref(const struct bt_port_input *port_input) +{ + bt_object_get_ref(port_input); +} - ret = port->connection ? 1 : 0; +void bt_port_input_put_ref(const struct bt_port_input *port_input) +{ + bt_object_put_ref(port_input); +} -end: - return ret; +void bt_port_output_get_ref(const struct bt_port_output *port_output) +{ + bt_object_get_ref(port_output); } -void *bt_private_port_get_user_data( - struct bt_private_port *private_port) +void bt_port_output_put_ref(const struct bt_port_output *port_output) { - return private_port ? - bt_port_from_private(private_port)->user_data : NULL; + bt_object_put_ref(port_output); }