📚

[bugs.ruby][Bug #20314] タイムアウトがネストしているときにブロックの後で例外が発生する可能性があるバグ報告

2024/03/12に公開

[Bug #20314] Simultaneous Timeout expires may raise an exception after the block

  • 以下のように同時刻にタイムアウトの期限が切れたときにブロックの後に例外が発生する可能性がある、というバグ報告
require "timeout"

class A < Exception
end

class B < Exception
end

begin
  Timeout.timeout(0.1, A) do
    Timeout.timeout(0.1, B) do
      nil while true
    end
  end
rescue A, B
  p $! #=> #<A: execution expired>

  # 上記の呼び出しが返ってきた後に例外 B が発生する
  #=> test.rb:16:in `p': execution expired (B)

  p :end # not reach
end
  • いくつかの解決策も提示されていますが今の所これといった対応はまだされてないようですね
GitHubで編集を提案

Discussion