From 7372a078b460771160950a4587e922a38fa8db03 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 31 Mar 2023 10:14:36 +0200 Subject: [PATCH] context: don't try to restore rate on !runnable nodes There is no point in trying to restore a node to the default rate when it's not going to run. This avoids loops when rate switching from one forced rate to another. --- src/pipewire/context.c | 2 +- src/pipewire/impl-node.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pipewire/context.c b/src/pipewire/context.c index a097d8e8f..725df2050 100644 --- a/src/pipewire/context.c +++ b/src/pipewire/context.c @@ -1304,7 +1304,7 @@ again: s->moved = false; } - if (n->forced_rate && !force_rate) { + if (n->forced_rate && !force_rate && n->runnable) { /* A node that was forced to a rate but is no longer being * forced can restore its rate */ pw_log_info("(%s-%u) restore rate", n->name, n->info.id); diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index 956540467..74f71338a 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -1026,6 +1026,8 @@ static void check_properties(struct pw_impl_node *node) if ((str = pw_properties_get(node->properties, PW_KEY_NODE_FORCE_RATE))) { if (spa_atou32(str, &value, 0) && node->force_rate != value) { + pw_log_info("(%s-%u) force-rate:%u -> %u", node->name, + node->info.id, node->force_rate, value); node->force_rate = value; node->stamp = ++context->stamp; recalc_reason = "force rate changed";