From 31325171a5fa776741a9632ba27bdde85884de81 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 11 Jan 2008 11:20:18 +0000 Subject: * proc.c (proc_mark): needs to mark the receiver too. a patch from Chris Heath in [ruby-core:14983]. [ruby-core:14885] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@14995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ bootstraptest/test_proc.rb | 7 +++++++ proc.c | 1 + 3 files changed, 14 insertions(+) diff --git a/ChangeLog b/ChangeLog index 80aa9ec51..150716715 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Fri Jan 11 20:20:16 2008 Nobuyoshi Nakada + + * proc.c (proc_mark): needs to mark the receiver too. a patch from + Chris Heath in [ruby-core:14983]. + [ruby-core:14885] + Fri Jan 11 18:28:49 2008 Eric Hodel * lib/rdoc/usage.rb: Removed. diff --git a/bootstraptest/test_proc.rb b/bootstraptest/test_proc.rb index 049bc9913..875a000b7 100644 --- a/bootstraptest/test_proc.rb +++ b/bootstraptest/test_proc.rb @@ -253,3 +253,10 @@ assert_equal %q{3}, %q{ a + 2 }.call } + +assert_equal %q{ok}, %q{ + class A; def get_block; proc {puts "ok"} end end + block = A.new.get_block + GC.start + block.call +} diff --git a/proc.c b/proc.c index ac7f39bdb..c8eac602a 100644 --- a/proc.c +++ b/proc.c @@ -52,6 +52,7 @@ proc_mark(void *ptr) RUBY_MARK_UNLESS_NULL(proc->blockprocval); RUBY_MARK_UNLESS_NULL((VALUE)proc->special_cref_stack); RUBY_MARK_UNLESS_NULL(proc->block.proc); + RUBY_MARK_UNLESS_NULL(proc->block.self); if (proc->block.iseq && RUBY_VM_IFUNC_P(proc->block.iseq)) { RUBY_MARK_UNLESS_NULL((VALUE)(proc->block.iseq)); } -- cgit