-static
-int muxer_msg_iter_handle_newly_connected_ports(
- struct muxer_msg_iter *muxer_msg_iter)
-{
- int ret = 0;
-
- BT_LOGV("Handling newly connected ports: "
- "muxer-msg-iter-addr=%p", muxer_msg_iter);
-
- /*
- * Here we create one upstream message iterator for each
- * newly connected port. We do NOT perform an initial "next" on
- * those new upstream message iterators: they are
- * invalidated, to be validated later. The list of newly
- * connected ports to handle here is updated by
- * muxer_port_connected().
- */
- while (true) {
- GList *node = muxer_msg_iter->newly_connected_self_ports;
- bt_self_component_port_input *self_port;
- const bt_port *port;
- bt_self_component_port_input_message_iterator *
- upstream_msg_iter = NULL;
- struct muxer_upstream_msg_iter *muxer_upstream_msg_iter;
-
- if (!node) {
- break;
- }
-
- self_port = node->data;
- port = bt_self_component_port_as_port(
- bt_self_component_port_input_as_self_component_port(
- (self_port)));
- BT_ASSERT(port);
-
- if (!bt_port_is_connected(port)) {
- /*
- * Looks like this port is not connected
- * anymore: we can't create an upstream
- * message iterator on its (non-existing)
- * connection in this case.
- */
- goto remove_node;
- }
-
- upstream_msg_iter = create_msg_iter_on_input_port(
- self_port, &ret);
- if (ret) {
- /* create_msg_iter_on_input_port() logs errors */
- BT_ASSERT(!upstream_msg_iter);
- goto error;
- }
-
- muxer_upstream_msg_iter =
- muxer_msg_iter_add_upstream_msg_iter(
- muxer_msg_iter, upstream_msg_iter);
- BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_PUT_REF_AND_RESET(upstream_msg_iter);
- if (!muxer_upstream_msg_iter) {
- /*
- * muxer_msg_iter_add_upstream_msg_iter()
- * logs errors.
- */
- goto error;
- }
-
-remove_node:
- bt_self_component_port_input_message_iterator_put_ref(upstream_msg_iter);
- muxer_msg_iter->newly_connected_self_ports =
- g_list_delete_link(
- muxer_msg_iter->newly_connected_self_ports,
- node);
- }
-
- goto end;
-
-error:
- if (ret >= 0) {
- ret = -1;
- }
-
-end:
- return ret;
-}
-