From: nagachika00@... Date: 2014-10-18T18:35:54+00:00 Subject: [ruby-dev:48661] [ruby-trunk - Bug #10368] GC mark miss on bindings Issue #10368 has been updated by Tomoyuki Chikanaga. Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE Backported into `ruby_2_1` at r48004. ---------------------------------------- Bug #10368: GC mark miss on bindings https://bugs.ruby-lang.org/issues/10368#change-49521 * Author: Kazuki Tsujimoto * Status: Closed * Priority: Normal * Assignee: Koichi Sasada * Category: * Target version: * ruby -v: ruby 2.2.0dev (2014-10-11 trunk 47881) [x86_64-linux] * Backport: 2.0.0: REQUIRED, 2.1: DONE ---------------------------------------- 以下のコードでSEGVすることがあります。 mに渡したブロックがGCされてしまうのが原因です。 ~~~ruby def m binding end GC.stress = true b = nil tap do b = m {} end GC.start 0.times.to_a b.eval('yield') ~~~ ブロックに対応するProcオブジェクトをrb_binding_tに持たせるようにするパッチを添付します。 ---Files-------------------------------- 0001-add-blockprocval-to-rb_block_t.patch (4.87 KB) 0002-use-rb_vm_make_binding-instead-of-rb_binding_new_with_cfp.patch (1.9 KB) -- https://bugs.ruby-lang.org/