threads/interrupting_a_locking_fiber_no_parens.rb

tests/_examples/threads/interrupting_a_locking_fiber_no_parens.rb in the metorex repository.

# A thread raising into another that loops on a lock inside a fiber reaches it.
lock = Mutex.new
t2 = nil
t1 = Thread.new do
  loop do
    sleep 0.01
    t2.raise if t2
  end
end

rounds = 0
t2 = Thread.new do
  3.times do
    Fiber.new do
      begin
        loop { lock.synchronize {} }
      rescue RuntimeError
        rounds += 1
      end
    end.resume
  rescue RuntimeError
    retry
  end
end
t2.join
t1.kill
t1.join
p rounds > 0
p lock.locked?

Output:

true
false