📑

[Bug #21882] `IO::Buffer#locked` で例外が発生してもロックされたままになるバグ報告

に公開

[Bug #21882] IO::Buffer#locked leaves the buffer locked when the block raises

  • IO::Buffer#locked のブロック内で例外が発生した場合にロックされたままになっているというバグ報告
buf = IO::Buffer.new(100)

buf.locked { fail } rescue nil

buf.locked { p :ok }
# 期待する挙動 => p :ok が呼ばれる
# 実際の挙動   => error: Buffer already locked! (IO::Buffer::LockedError)
  • このバグは開発版の Ruby 4.1-dev で修正済み
buf = IO::Buffer.new(100)

buf.locked { fail } rescue nil

buf.locked { p :ok }
# Ruby 4.0 => error: Buffer already locked! (IO::Buffer::LockedError)
# Ruby 4.1 => p :ok が呼ばれる
GitHubで編集を提案

Discussion