X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fgraph%2Fsource.c;h=57244c062584e14d978c40640ae79a015e23300a;hb=147337a3be96c8ea69fee38099762370ecac8d51;hp=09af697232cb0d0ee3803175f835e578618e595b;hpb=a256a42d2324f0ba50153f29e2f7ef513a9905c0;p=babeltrace.git diff --git a/lib/graph/source.c b/lib/graph/source.c index 09af6972..57244c06 100644 --- a/lib/graph/source.c +++ b/lib/graph/source.c @@ -161,16 +161,19 @@ bt_private_component_source_get_output_private_port_by_index( bt_component_from_private(private_component), index)); } -struct bt_private_port *bt_private_component_source_add_output_private_port( +enum bt_component_status bt_private_component_source_add_output_private_port( struct bt_private_component *private_component, - const char *name, void *user_data) + const char *name, void *user_data, + struct bt_private_port **user_priv_port) { + enum bt_component_status status = BT_COMPONENT_STATUS_OK; struct bt_port *port = NULL; struct bt_component *component = bt_component_from_private(private_component); if (!component) { BT_LOGW_STR("Invalid parameter: component is NULL."); + status = BT_COMPONENT_STATUS_INVALID; goto end; } @@ -179,12 +182,24 @@ struct bt_private_port *bt_private_component_source_add_output_private_port( "comp-addr=%p, comp-name=\"%s\", comp-class-type=%s", component, bt_component_get_name(component), bt_component_class_type_string(component->class->type)); + status = BT_COMPONENT_STATUS_INVALID; goto end; } /* bt_component_add_output_port() logs details and errors */ port = bt_component_add_output_port(component, name, user_data); + if (!port) { + status = BT_COMPONENT_STATUS_NOMEM; + goto end; + } + + if (user_priv_port) { + /* Move reference to user */ + *user_priv_port = bt_private_port_from_port(port); + port = NULL; + } end: - return bt_private_port_from_port(port); + bt_put(port); + return status; }