From ebf4bf8d83d1177903cf0f243f21b56543eca130 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 29 Jul 2021 16:43:54 +0200 Subject: [PATCH] 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. --- src/pipewire/context.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pipewire/context.c b/src/pipewire/context.c index fbb868dfa..f407212a8 100644 --- a/src/pipewire/context.c +++ b/src/pipewire/context.c @@ -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);