From afe71d7e48c28b0ae5cbd9327433e3c55c103fcb Mon Sep 17 00:00:00 2001 From: Julian Bouzas Date: Thu, 6 Jan 2022 10:53:38 -0500 Subject: [PATCH 02/14] 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 8ca5a69..c273c1f 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 -- 2.34.1