[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

  • 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されてしまうのが原因です。

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)