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

