From bb0efd777f187f10896c899ccebe93be0bf242f2 Mon Sep 17 00:00:00 2001 From: Torkel Niklasson Date: Thu, 18 Dec 2025 07:05:46 +0100 Subject: [PATCH] impl-node: Don't suspend when links are busy When suspend_on_idle is set and we got to idle, there is a chance that there is work in the work queue that is dependent on formats being set. In suspend_node, check whether the links have a non-zero busy count before suspending and return -EBUSY if they do. --- src/pipewire/impl-node.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index a8f65b06c..85bf452b0 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -537,6 +537,21 @@ static int suspend_node(struct pw_impl_node *this) if (this->info.state > 0 && this->info.state <= PW_NODE_STATE_SUSPENDED) return 0; + spa_list_for_each(p, &this->input_ports, link) { + if (p->busy_count > 0) { + pw_log_debug("%p: can't suspend, input port %d busy:%d", + this, p->port_id, p->busy_count); + return -EBUSY; + } + } + spa_list_for_each(p, &this->output_ports, link) { + if (p->busy_count > 0) { + pw_log_debug("%p: can't suspend, output port %d busy:%d", + this, p->port_id, p->busy_count); + return -EBUSY; + } + } + node_deactivate(this); pw_log_debug("%p: suspend node driving:%d driver:%d prepared:%d", this,