From b33874f8a0b578f11d51f003943baceef197a7e8 Mon Sep 17 00:00:00 2001 From: Chad Retz Date: Mon, 11 Aug 2025 14:43:39 -0500 Subject: [PATCH] Do not resume wait condition if fiber no longer alive --- .../internal/worker/workflow_instance/scheduler.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/temporalio/lib/temporalio/internal/worker/workflow_instance/scheduler.rb b/temporalio/lib/temporalio/internal/worker/workflow_instance/scheduler.rb index 6f300f9a..330ec874 100644 --- a/temporalio/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +++ b/temporalio/lib/temporalio/internal/worker/workflow_instance/scheduler.rb @@ -40,10 +40,15 @@ def run_until_all_yielded cond_fiber = nil cond_result = nil @wait_conditions.each do |seq, cond| + # Evaluate condition or skip if not true next unless (cond_result = cond.first.call) - cond_fiber = cond[1] - @wait_conditions.delete(seq) + # There have been reports of this fiber being completed already, so we make sure not to process if it + # has, but we still delete it + deleted_cond = @wait_conditions.delete(seq) + next unless deleted_cond&.last&.alive? + + cond_fiber = deleted_cond.last break end return unless cond_fiber