From 5e37d438815d279fb1cf19337aafdb1f95484b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Mon, 9 Mar 2026 20:50:53 +0100 Subject: [PATCH] pipewire: impl-{node,port}: do not cache failed param enumerations If the param enumeration fails, do not set `spa_param_info::user` to 1 indicating that the result is cached. Doing so can lead to the first (uncached) call failing, while the rest will succeed (with 0 params). --- src/pipewire/impl-node.c | 9 +++++++-- src/pipewire/impl-port.c | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index b9913d508..f590f36bc 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -2653,8 +2653,13 @@ int pw_impl_node_for_each_param(struct pw_impl_node *node, spa_hook_remove(&listener); if (user_data.cache) { - pw_param_update(&impl->param_list, &impl->pending_list, 0, NULL); - pi->user = 1; + if (SPA_RESULT_IS_OK(res) && !SPA_RESULT_IS_ASYNC(res)) { + pw_param_update(&impl->param_list, &impl->pending_list, 0, NULL); + pi->user = 1; + } + else { + pw_param_clear(&impl->pending_list, SPA_ID_INVALID); + } } } return res; diff --git a/src/pipewire/impl-port.c b/src/pipewire/impl-port.c index 3b87c8c0b..7731264db 100644 --- a/src/pipewire/impl-port.c +++ b/src/pipewire/impl-port.c @@ -1740,8 +1740,13 @@ int pw_impl_port_for_each_param(struct pw_impl_port *port, spa_hook_remove(&listener); if (user_data.cache) { - pw_param_update(&impl->param_list, &impl->pending_list, 0, NULL); - pi->user = 1; + if (SPA_RESULT_IS_OK(res) && !SPA_RESULT_IS_ASYNC(res)) { + pw_param_update(&impl->param_list, &impl->pending_list, 0, NULL); + pi->user = 1; + } + else { + pw_param_clear(&impl->pending_list, SPA_ID_INVALID); + } } }