summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'media-video/wireplumber/files/wireplumber-0.4.6-policy-node-schedule-a-rescan-without-timeout-if-def.patch')
-rw-r--r--media-video/wireplumber/files/wireplumber-0.4.6-policy-node-schedule-a-rescan-without-timeout-if-def.patch50
1 files changed, 50 insertions, 0 deletions
diff --git a/media-video/wireplumber/files/wireplumber-0.4.6-policy-node-schedule-a-rescan-without-timeout-if-def.patch b/media-video/wireplumber/files/wireplumber-0.4.6-policy-node-schedule-a-rescan-without-timeout-if-def.patch
new file mode 100644
index 000000000000..28b5a5ea22a4
--- /dev/null
+++ b/media-video/wireplumber/files/wireplumber-0.4.6-policy-node-schedule-a-rescan-without-timeout-if-def.patch
@@ -0,0 +1,50 @@
+https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/afe71d7e48c28b0ae5cbd9327433e3c55c103fcb
+
+From afe71d7e48c28b0ae5cbd9327433e3c55c103fcb Mon Sep 17 00:00:00 2001
+From: Julian Bouzas <julian.bouzas@collabora.com>
+Date: Thu, 6 Jan 2022 10:53:38 -0500
+Subject: [PATCH] policy-node: schedule a rescan without timeout if defined
+ target is not found
+
+Fixes #146
+---
+ src/scripts/policy-node.lua | 17 ++++-------------
+ 1 file changed, 4 insertions(+), 13 deletions(-)
+
+diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua
+index 8ca5a695..c273c1fe 100644
+--- a/src/scripts/policy-node.lua
++++ b/src/scripts/policy-node.lua
+@@ -552,25 +552,16 @@ function handleLinkable (si)
+ si_target = nil
+ end
+
+- -- wait up to 2 seconds for the requested target to become available
+- -- this is because the client may have already "seen" a target that we haven't
+- -- yet prepared, which leads to a race condition
++ -- if the client has seen a target that we haven't yet prepared, schedule
++ -- a rescan one more time and hope for the best
+ local si_id = si.id
+ if si_props["node.target"] and si_props["node.target"] ~= "-1"
+ and not si_target
+ and not si_flags[si_id].was_handled
+ and not si_flags[si_id].done_waiting then
+- if not si_flags[si_id].timeout_source then
+- si_flags[si_id].timeout_source = Core.timeout_add(2000, function()
+- if si_flags[si_id] then
+- si_flags[si_id].done_waiting = true
+- si_flags[si_id].timeout_source = nil
+- scheduleRescan()
+- end
+- return false
+- end)
+- end
+ Log.info (si, "... waiting for target")
++ si_flags[si_id].done_waiting = true
++ scheduleRescan()
+ return
+ end
+
+--
+GitLab
+