context: don't follow links to inactive nodes

We don't need to follow nodes that we already visited or that are
inactive so skip them early.

Always try to prepare the link otherwise, not only for passive links
because non-passive links might also be paused because of a suspended
driver.
This commit is contained in:
Wim Taymans 2021-07-29 16:43:54 +02:00
parent 7092effaab
commit ebf4bf8d83

View file

@ -944,13 +944,14 @@ static int collect_nodes(struct pw_context *context, struct pw_impl_node *driver
spa_list_for_each(l, &p->links, input_link) {
t = l->output->node;
if (l->passive)
pw_impl_link_prepare(l);
else if (t->active)
driver->passive = n->passive = false;
if (t->visited || !t->active)
continue;
pw_impl_link_prepare(l);
if (!l->passive)
driver->passive = n->passive = false;
if (l->prepared) {
t->visited = true;
spa_list_append(&queue, &t->sort_link);
@ -961,13 +962,12 @@ static int collect_nodes(struct pw_context *context, struct pw_impl_node *driver
spa_list_for_each(l, &p->links, output_link) {
t = l->input->node;
if (l->passive)
pw_impl_link_prepare(l);
else if (t->active)
driver->passive = n->passive = false;
if (t->visited || !t->active)
continue;
if (!l->passive)
driver->passive = n->passive = false;
if (l->prepared) {
t->visited = true;
spa_list_append(&queue, &t->sort_link);