From 51b6c2cbd76b09799b45c86b59ad0b56ae7eee22 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 16 Sep 2020 18:11:16 +0200 Subject: [PATCH] context: handle the fallback node correctly A passive node can still be the fallback node. It becomes non-passive if there is a node assigned to it. This makes the Dummy node work again in the case of jack clients that always need to be scheduled. --- src/pipewire/context.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/pipewire/context.c b/src/pipewire/context.c index b1d744615..41c9d01ec 100644 --- a/src/pipewire/context.c +++ b/src/pipewire/context.c @@ -897,13 +897,16 @@ int pw_context_recalc_graph(struct pw_context *context, const char *reason) /* from now on we are only interested in active driving nodes. * We're going to see if there are active followers. */ - if (!n->driving || !n->active || n->passive) + if (!n->driving || !n->active) continue; /* first active driving node is fallback */ if (fallback == NULL) fallback = n; + if (n->passive) + continue; + spa_list_for_each(s, &n->follower_list, follower_link) { pw_log_debug(NAME" %p: driver %p: follower %p %s: active:%d", context, n, s, s->name, s->active); @@ -930,14 +933,16 @@ int pw_context_recalc_graph(struct pw_context *context, const char *reason) if (!n->visited) { struct pw_impl_node *t; - pw_log_debug(NAME" %p: unassigned node %p: '%s' active:%d want_driver:%d", - context, n, n->name, n->active, n->want_driver); + pw_log_debug(NAME" %p: unassigned node %p: '%s' active:%d want_driver:%d target:%p", + context, n, n->name, n->active, n->want_driver, target); - t = n->active && n->want_driver ? target : NULL; + t = (n->active && n->want_driver) ? target : NULL; pw_impl_node_set_driver(n, t); if (t == NULL) ensure_state(n, false); + else + t->passive = false; } n->visited = false; }