pipewire/0001-impl-node-improve-suspend.patch
Antonio Larrosa e4f628e84d Accepting request 1105883 from home:alarrosa:branches:multimedia:libs
- Update to version 0.3.78:
  * Highlights
    - An old regression was fixed with where some nodes would not
      run.
    - A regression was fixed where removed events would not be
      shown in some cases. This would result in duplicate entries
      in audio clients.
    - Fix an off-by-one in the vban audio receiver. Tweak the rate
      adaption a little.
    - ACP will now set a UCM verb before probing the pro-audio
      devices.
    - More bugfixes and improvements.
  * PipeWire
    - An old regression was fixed with where some nodes would not
      run. (#3405)
    - Suspend was improved a little to avoid races when the session
      manager would suspend right when a driver was starting.
  * Modules
    - module-rtp-sap does not use the deprecated inet_aton anymore.
    - Fix an off-by-one in the vban audio receiver. Tweak the rate
      adaption a little. (#3380)
  * SPA
    - ACP will now set a UCM verb before probing the pro-audio
      devices. (#3407)
    - The mandatory flag will be set now on the video modifiers.
    - EVL was updated to Xenomai4 r46 and xbuf creation was
      improved.
    - An option was added to force colors in the log even when
      logging to !tty.
    - The return type of spa_pod_builder_control() was fixed.

OBS-URL: https://build.opensuse.org/request/show/1105883
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/pipewire?expand=0&rev=150
2023-08-25 09:41:45 +00:00

45 lines
1.5 KiB
Diff

From 3b052eaa9986c2f5182eb8a1b2f2b5c10be31a12 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Thu, 24 Aug 2023 09:50:28 +0200
Subject: [PATCH] impl-node: improve suspend
Make sure we can only suspend when the node is (going to) IDLE. We don't
really want to allow applications to suspend a node that is running or
starting up.
This might fix a race when a node is suspended at the same time it is
started and cause silence. It also fixes the issue of total silence when
doing "pactl suspend <node> 1" on a running node.
See #3378
---
src/pipewire/impl-node.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c
index ca431c389..ff9effedc 100644
--- a/src/pipewire/impl-node.c
+++ b/src/pipewire/impl-node.c
@@ -591,6 +591,7 @@ static int node_send_command(void *object, const struct spa_command *command)
{
struct resource_data *data = object;
struct pw_impl_node *node = data->node;
+ struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
uint32_t id = SPA_NODE_COMMAND_ID(command);
pw_log_debug("%p: got command %d (%s)", node, id,
@@ -598,7 +599,9 @@ static int node_send_command(void *object, const struct spa_command *command)
switch (id) {
case SPA_NODE_COMMAND_Suspend:
- suspend_node(node);
+ if (node->info.state == PW_NODE_STATE_ERROR ||
+ impl->pending_state == PW_NODE_STATE_IDLE)
+ suspend_node(node);
break;
default:
spa_node_send_command(node->node, command);
--
GitLab