From: "nagachika (Tomoyuki Chikanaga) via ruby-core" Date: 2025-10-05T00:25:24+00:00 Subject: [ruby-core:123392] [Ruby Bug#21610] Use ec->interrupt_mask to prevent interrupts. Issue #21610 has been updated by nagachika (Tomoyuki Chikanaga). @ioquatix Thank you for considering the stable backports! Could you please create the backport pull requests for commit commit:e900e9fc9ace5e36de5170c83df0f56167e4c8a9 ? ---------------------------------------- Bug #21610: Use ec->interrupt_mask to prevent interrupts. https://bugs.ruby-lang.org/issues/21610#change-114763 * Author: ioquatix (Samuel Williams) * Status: Closed * Assignee: ioquatix (Samuel Williams) * Backport: 3.2: REQUIRED, 3.3: REQUIRED, 3.4: DONE ---------------------------------------- The following program can trigger `rb_bug` in `rb_fiber_scheduler_unblock`: ```ruby require 'async/scheduler' scheduler = Async::Scheduler.new Fiber.set_scheduler(scheduler) Signal.trap(:USR1) do end q = Thread::Queue.new Thread.new do loop do Ractor.new do Process.kill(:USR1, $$) end.join end end Fiber.schedule do Fiber.schedule do 1.upto(1000000) do |i| sleep 0.01 q.pop q.push(1) puts "1 iter push/pop" end end Fiber.schedule do 1.upto(1000000) do |i| sleep 0.01 q.push(i) q.pop puts "1 iter push/pop#2" end end Fiber.schedule do gets exit! end end ``` In brief, when `rb_fiber_scheduler_unblock` executes with `ec->interrupt_flag` set, the following sequence can occur: ``` Thread A (Signaling) Thread B (Blocked Fiber) -------------------- --------------------- calls unblock(fiber_x) ������ enters scheduler user code fiber_x sleeping in scheduler.block() ������ ������ SIGNAL INTERRUPT ������ ������ raises SignalException ������ unblock operation aborted ������ scheduler state inconsistent ������ returns believing success ������ fiber_x waits forever ������ ``` Confirmed fix: https://github.com/ruby/ruby/pull/14588 -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/