Revert "context: handle link-group nodes"

This reverts commit 2bfe772bb4.

This does not take into account nodes recursively becomming runnable and
so does not set the runnable state on all nodes correctly, like for
combine-stream.

Revert for now, it probably requires a new algorithm to make this work.

See #3128
This commit is contained in:
Wim Taymans 2023-04-03 10:20:27 +02:00
parent 0873c6942a
commit 147674c5dd

View file

@ -768,8 +768,7 @@ error:
static int ensure_state(struct pw_impl_node *node, bool running) static int ensure_state(struct pw_impl_node *node, bool running)
{ {
enum pw_node_state state = node->info.state; enum pw_node_state state = node->info.state;
if (node->active && node->runnable && if (node->active && !SPA_FLAG_IS_SET(node->spa_flags, SPA_NODE_FLAG_NEED_CONFIGURE) && running)
!SPA_FLAG_IS_SET(node->spa_flags, SPA_NODE_FLAG_NEED_CONFIGURE) && running)
state = PW_NODE_STATE_RUNNING; state = PW_NODE_STATE_RUNNING;
else if (state > PW_NODE_STATE_IDLE) else if (state > PW_NODE_STATE_IDLE)
state = PW_NODE_STATE_IDLE; state = PW_NODE_STATE_IDLE;
@ -843,31 +842,6 @@ static int collect_nodes(struct pw_context *context, struct pw_impl_node *node,
} }
} }
} }
/* go through all the nodes that are linked together in some way.
* They inherit the runnable flag and are moved to the same driver. */
if (n->link_group != NULL) {
spa_list_for_each(t, &context->node_list, link) {
if (t->exported || !t->active)
continue;
/* don't care if our state won't change below. */
if ((t->runnable || !n->runnable) && t->visited)
continue;
if (!spa_streq(t->link_group, n->link_group))
continue;
/* All nodes from the same link group inherit the runnable
* flag. */
t->runnable |= n->runnable;
if (!t->visited) {
/* if we did not visit this node, add it to the same
* driver */
t->visited = true;
spa_list_append(&queue, &t->sort_link);
}
pw_log_debug("%p: %s join link group %s runnable:%u",
t, t->name, t->link_group, t->runnable);
}
}
/* now go through all the nodes that have the same group and /* now go through all the nodes that have the same group and
* that are not yet visited */ * that are not yet visited */
if (n->group != NULL) { if (n->group != NULL) {