From: kazuki@... Date: 2014-10-18T11:46:47+00:00 Subject: [ruby-dev:48659] [ruby-trunk - Bug #10368] [Closed] GC mark miss on bindings Issue #10368 has been updated by Kazuki Tsujimoto. Status changed from Assigned to Closed % Done changed from 0 to 100 Applied in changeset r48000. ---------- * vm_core.h, vm.c, proc.c: fix GC mark miss on bindings. [ruby-dev:48616] [Bug #10368] * test/ruby/test_eval.rb: add a test code. ---------------------------------------- Bug #10368: GC mark miss on bindings https://bugs.ruby-lang.org/issues/10368#change-49516 * 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: REQUIRED ---------------------------------------- 以下のコードで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/