From: usa@... Date: 2014-10-20T05:46:13+00:00 Subject: [ruby-dev:48677] [ruby-trunk - Bug #10368] GC mark miss on bindings Issue #10368 has been updated by Usaku NAKAMURA. Backport changed from 2.0.0: REQUIRED, 2.1: DONE to 2.0.0: DONE, 2.1: DONE Backported into `ruby_2_0_0` at r48048. ---------------------------------------- Bug #10368: GC mark miss on bindings https://bugs.ruby-lang.org/issues/10368#change-49549 * 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: DONE, 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/